Cleaned up APPLE_client_storage - fixed 565 chromakeyed textures (autsch :^)

This commit is contained in:
Jens Hemprich 2007-02-26 13:19:41 +00:00
parent 0bb2b8d61a
commit 21db87ffbc
6 changed files with 21 additions and 17 deletions

Binary file not shown.

File diff suppressed because one or more lines are too long

View File

@ -65,7 +65,7 @@ stExtensionSupport glNecessaryExt[] =
{ "GL_SGIS_texture_edge_clamp", OGL_EXT_DESIRED, &dummyExtVariable, &InternalConfig.EXT_SGIS_texture_edge_clamp }, { "GL_SGIS_texture_edge_clamp", OGL_EXT_DESIRED, &dummyExtVariable, &InternalConfig.EXT_SGIS_texture_edge_clamp },
{ "GL_EXT_paletted_texture", OGL_EXT_DESIRED, &UserConfig.EXT_paletted_texture, &InternalConfig.EXT_paletted_texture }, { "GL_EXT_paletted_texture", OGL_EXT_DESIRED, &UserConfig.EXT_paletted_texture, &InternalConfig.EXT_paletted_texture },
{ "GL_APPLE_packed_pixels", OGL_EXT_REQUIRED, &dummyExtVariable, &dummyExtVariable2 }, { "GL_APPLE_packed_pixels", OGL_EXT_REQUIRED, &dummyExtVariable, &dummyExtVariable2 },
{ "GL_APPLE_client_storage", OGL_EXT_DESIRED, &dummyExtVariable, &InternalConfig.EXT_Client_Storage }, { "GL_APPLE_client_storage", OGL_EXT_DESIRED, &UserConfig.APPLE_client_storage, &InternalConfig.APPLE_client_storage },
{ "GL_EXT_compiled_vertex_array", OGL_EXT_DESIRED, &UserConfig.EXT_compiled_vertex_array,&InternalConfig.EXT_compiled_vertex_array }, { "GL_EXT_compiled_vertex_array", OGL_EXT_DESIRED, &UserConfig.EXT_compiled_vertex_array,&InternalConfig.EXT_compiled_vertex_array },
{ "GL_ARB_texture_rectangle", OGL_EXT_DESIRED, &UserConfig.ARB_texture_rectangle, &InternalConfig.ARB_texture_rectangle }, { "GL_ARB_texture_rectangle", OGL_EXT_DESIRED, &UserConfig.ARB_texture_rectangle, &InternalConfig.ARB_texture_rectangle },
#ifdef OPENGLIDE_SYSTEM_HAS_FOGCOORD #ifdef OPENGLIDE_SYSTEM_HAS_FOGCOORD
@ -249,7 +249,7 @@ void GLExtensions(void)
GlideMsg("Maximum level of anisotropy = %d\n", MaxAnisotropyLevel); GlideMsg("Maximum level of anisotropy = %d\n", MaxAnisotropyLevel);
// Since this a global setting, texture data must not be uploaded from temp buffers // Since this a global setting, texture data must not be uploaded from temp buffers
if (InternalConfig.EXT_Client_Storage) if (InternalConfig.APPLE_client_storage)
{ {
glPixelStorei(GL_UNPACK_CLIENT_STORAGE_APPLE, true); glPixelStorei(GL_UNPACK_CLIENT_STORAGE_APPLE, true);
glReportError(); glReportError();

View File

@ -194,7 +194,7 @@ void GlideSettings::defaults()
EXT_secondary_color = true; EXT_secondary_color = true;
EXT_SGIS_generate_mipmap = true; EXT_SGIS_generate_mipmap = true;
EXT_SGIS_texture_edge_clamp = true; EXT_SGIS_texture_edge_clamp = true;
EXT_Client_Storage = true; APPLE_client_storage = true;
EXT_compiled_vertex_array = true; EXT_compiled_vertex_array = true;
ARB_texture_rectangle = true; ARB_texture_rectangle = true;
EXT_texture_filter_anisotropic = true; EXT_texture_filter_anisotropic = true;
@ -255,6 +255,7 @@ GlideSettings::IOErr GlideSettings::read_settings()
get("PedanticFrameBufferEmulation", &PedanticFrameBufferEmulation); get("PedanticFrameBufferEmulation", &PedanticFrameBufferEmulation);
get("EXT_compiled_vertex_array", &EXT_compiled_vertex_array); get("EXT_compiled_vertex_array", &EXT_compiled_vertex_array);
get("ARB_texture_rectangle", &ARB_texture_rectangle); get("ARB_texture_rectangle", &ARB_texture_rectangle);
get("APPLE_client_storage", &APPLE_client_storage);
get("ARB_multitexture", &ARB_multitexture); get("ARB_multitexture", &ARB_multitexture);
get("EXT_paletted_texture", &EXT_paletted_texture); get("EXT_paletted_texture", &EXT_paletted_texture);
get("EXT_clip_volume_hint", &EXT_clip_volume_hint); get("EXT_clip_volume_hint", &EXT_clip_volume_hint);
@ -502,6 +503,7 @@ GlideSettings::IOErr GlideSettings::saveSettings()
put(); put();
put("EXT_compiled_vertex_array", EXT_compiled_vertex_array); put("EXT_compiled_vertex_array", EXT_compiled_vertex_array);
put("ARB_texture_rectangle", ARB_texture_rectangle); put("ARB_texture_rectangle", ARB_texture_rectangle);
put("APPLE_client_storage", APPLE_client_storage);
put("ARB_multitexture", ARB_multitexture); put("ARB_multitexture", ARB_multitexture);
put("EXT_paletted_texture", EXT_paletted_texture); put("EXT_paletted_texture", EXT_paletted_texture);
put("EXT_clip_volume_hint", EXT_clip_volume_hint); put("EXT_clip_volume_hint", EXT_clip_volume_hint);

View File

@ -98,7 +98,7 @@ struct ConfigStruct
bool EXT_paletted_texture; bool EXT_paletted_texture;
bool EXT_SGIS_generate_mipmap; bool EXT_SGIS_generate_mipmap;
bool EXT_SGIS_texture_edge_clamp; bool EXT_SGIS_texture_edge_clamp;
bool EXT_Client_Storage; bool APPLE_client_storage;
bool EXT_compiled_vertex_array; bool EXT_compiled_vertex_array;
bool ARB_texture_rectangle; bool ARB_texture_rectangle;
#ifdef OPENGLIDE_SYSTEM_HAS_FOGCOORD #ifdef OPENGLIDE_SYSTEM_HAS_FOGCOORD

View File

@ -60,7 +60,7 @@ void PGTexture::genPaletteMipmaps( FxU32 width, FxU32 height, const FxU8 *data )
} }
} }
PGTexture::PGTexture( int mem_size ) PGTexture::PGTexture(int mem_size)
{ {
m_db = new TexDB( mem_size ); m_db = new TexDB( mem_size );
m_palette_dirty = true; m_palette_dirty = true;
@ -68,8 +68,17 @@ PGTexture::PGTexture( int mem_size )
m_chromakey_mode = GR_CHROMAKEY_DISABLE; m_chromakey_mode = GR_CHROMAKEY_DISABLE;
m_tex_memory_size = mem_size; m_tex_memory_size = mem_size;
m_memory = (FxU8*) AllocBuffer(mem_size, sizeof(FxU8)); m_memory = (FxU8*) AllocBuffer(mem_size, sizeof(FxU8));
if (InternalConfig.EXT_Client_Storage) // This is initialized before the rendering context is available and before
// the list of OpenGL extensions can be checked against APPLE_client_storage.
// As a result the texture buffer is allocated bases on the user setting.
// And it might be legal to download textures before grWinOpen() so
// using the user config setting is the best we can do
if (UserConfig.APPLE_client_storage)
{ {
// use client storage to avoid OpenGL-internal copy
// OpenGL may still make a copy if the color format isn't supported natively
// by the graphics card but all xto8888 conversions should benefit from this
// @todo: Not true for OSX, but for now we stay compatible to native OS9
// Alloc 4-times the size of the Glide buffer for texture storage // Alloc 4-times the size of the Glide buffer for texture storage
m_textureCache = reinterpret_cast<FxU32*>(AllocBuffer(m_tex_memory_size, sizeof(FxU32))); m_textureCache = reinterpret_cast<FxU32*>(AllocBuffer(m_tex_memory_size, sizeof(FxU32)));
// No memory is wasted here because we save the internal OpenGL copy // No memory is wasted here because we save the internal OpenGL copy
@ -623,14 +632,9 @@ bool PGTexture::MakeReady(TTextureStruct* tex_coords, unsigned long number_of_tr
} }
glReportError(); glReportError();
// use client storage to avoid OpenGL-internal copy
// OpenGL may still make a copy if the color format isn't supported natively
// by the graphics card but all xto8888 conversions should benefit from this
// @todo: Not true for OSX, but for now we stay compatible to native OS9
const bool useClientStorage = InternalConfig.EXT_Client_Storage /* && !subtexcoords */;
if (subtexcoords) if (subtexcoords)
{ {
// EXT_Client_Storage doesn't explicitely forbid to adjust pixel unpack :^) // APPLE_client_storage doesn't explicitely forbid to adjust pixel unpack :^)
glPixelStorei(GL_UNPACK_SKIP_PIXELS, subtexcoords->left); glPixelStorei(GL_UNPACK_SKIP_PIXELS, subtexcoords->left);
glPixelStorei(GL_UNPACK_SKIP_ROWS, subtexcoords->top); glPixelStorei(GL_UNPACK_SKIP_ROWS, subtexcoords->top);
glPixelStorei(GL_UNPACK_ROW_LENGTH, texVals.width); glPixelStorei(GL_UNPACK_ROW_LENGTH, texVals.width);
@ -640,11 +644,9 @@ bool PGTexture::MakeReady(TTextureStruct* tex_coords, unsigned long number_of_tr
} }
FxU32* texBuffer; FxU32* texBuffer;
// Which buffer // Which buffer
if (useClientStorage) if (m_textureCache)
{ {
texBuffer = &m_textureCache[m_startAddress]; texBuffer = &m_textureCache[m_startAddress];
// glPixelStorei(GL_UNPACK_CLIENT_STORAGE_APPLE, true);
// glReportError();
} }
else else
{ {
@ -658,7 +660,7 @@ bool PGTexture::MakeReady(TTextureStruct* tex_coords, unsigned long number_of_tr
{ {
// Read about anisotropy and chromakey issues in macFormatConversions.cpp // Read about anisotropy and chromakey issues in macFormatConversions.cpp
Convert565Kto8888((FxU16*)data, m_chromakey_value_565, texBuffer, texVals.nPixels); Convert565Kto8888((FxU16*)data, m_chromakey_value_565, texBuffer, texVals.nPixels);
DownloadMipmapsToOpenGL(4, GL_RGBA, GL_UNSIGNED_BYTE, m_tex_temp, texVals, !use_mipmap_ext); DownloadMipmapsToOpenGL(4, GL_RGBA, GL_UNSIGNED_BYTE, texBuffer, texVals, !use_mipmap_ext);
} }
else else
{ {