From f3dfadd1f949177fb74db7ee55cec9b3fb684d52 Mon Sep 17 00:00:00 2001 From: Sam Hocevar Date: Thu, 28 Jun 2012 12:30:23 +0000 Subject: [PATCH] gpu: fix vertex and index buffer behaviour on the PS3. --- src/gpu/indexbuffer.cpp | 14 +++++++------- src/gpu/vertexbuffer.cpp | 19 ++++++++++++++----- 2 files changed, 21 insertions(+), 12 deletions(-) diff --git a/src/gpu/indexbuffer.cpp b/src/gpu/indexbuffer.cpp index bc68167e..0948bbec 100644 --- a/src/gpu/indexbuffer.cpp +++ b/src/gpu/indexbuffer.cpp @@ -47,7 +47,7 @@ class IndexBufferData IDirect3DIndexBuffer9 *m_ibo; #elif defined _XBOX D3DIndexBuffer *m_ibo; -#elif !defined __CELLOS_LV2__ && !defined __ANDROID__ +#else GLuint m_ibo; uint8_t *m_memory; #endif @@ -69,7 +69,7 @@ IndexBuffer::IndexBuffer(size_t size) D3DFMT_INDEX16, D3DPOOL_MANAGED, &m_data->m_ibo, NULL))) Abort(); -#elif !defined __CELLOS_LV2__ && !defined __ANDROID__ +#else glGenBuffers(1, &m_data->m_ibo); m_data->m_memory = new uint8_t[size]; #endif @@ -82,7 +82,7 @@ IndexBuffer::~IndexBuffer() #if defined USE_D3D9 || defined _XBOX if (FAILED(m_data->m_ibo->Release())) Abort(); -#elif !defined __CELLOS_LV2__ && !defined __ANDROID__ +#else glDeleteBuffers(1, &m_data->m_ibo); delete[] m_data->m_memory; #endif @@ -100,7 +100,7 @@ void *IndexBuffer::Lock(size_t offset, size_t size) if (FAILED(m_data->m_ibo->Lock(offset, size, (void **)&ret, 0))) Abort(); return ret; -#elif !defined __CELLOS_LV2__ && !defined __ANDROID__ +#else return m_data->m_memory + offset; #endif } @@ -113,7 +113,7 @@ void IndexBuffer::Unlock() #if defined USE_D3D9 || defined _XBOX if (FAILED(m_data->m_ibo->Unlock())) Abort(); -#elif !defined __CELLOS_LV2__ && !defined __ANDROID__ +#else glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_data->m_ibo); glBufferData(GL_ELEMENT_ARRAY_BUFFER, m_data->m_size, m_data->m_memory, GL_STATIC_DRAW); @@ -128,7 +128,7 @@ void IndexBuffer::Bind() #if defined USE_D3D9 || defined _XBOX if (FAILED(g_d3ddevice->SetIndices(m_data->m_ibo))) Abort(); -#elif !defined __CELLOS_LV2__ && !defined __ANDROID__ +#else glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_data->m_ibo); /* XXX: not necessary because we kept track of the size */ //int size; @@ -144,7 +144,7 @@ void IndexBuffer::Unbind() #if defined USE_D3D9 || defined _XBOX if (FAILED(g_d3ddevice->SetIndices(NULL))) Abort(); -#elif !defined __CELLOS_LV2__ && !defined __ANDROID__ +#else glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); #endif } diff --git a/src/gpu/vertexbuffer.cpp b/src/gpu/vertexbuffer.cpp index 90a8a10b..7fb2400f 100644 --- a/src/gpu/vertexbuffer.cpp +++ b/src/gpu/vertexbuffer.cpp @@ -246,7 +246,10 @@ void VertexDeclaration::Unbind() //glDisableVertexAttribArray(m_attrib); #else /* Or even: */ - //glDisableClientState(GL_VERTEX_ARRAY); + glDisableClientState(GL_VERTEX_ARRAY); + glDisableClientState(GL_TEXTURE_COORD_ARRAY); + glDisableClientState(GL_NORMAL_ARRAY); + glDisableClientState(GL_COLOR_ARRAY); #endif } @@ -314,6 +317,12 @@ void VertexDeclaration::SetStream(VertexBuffer *vb, ShaderAttrib attr1, case VertexUsage::Position: glEnableClientState(GL_VERTEX_ARRAY); break; + case VertexUsage::TexCoord: + glEnableClientState(GL_TEXTURE_COORD_ARRAY); + break; + case VertexUsage::Normal: + glEnableClientState(GL_NORMAL_ARRAY); + break; case VertexUsage::Color: glEnableClientState(GL_COLOR_ARRAY); break; @@ -530,7 +539,7 @@ VertexBuffer::VertexBuffer(size_t size) if (FAILED(g_d3ddevice->CreateVertexBuffer(size, D3DUSAGE_WRITEONLY, NULL, D3DPOOL_MANAGED, &m_data->m_vbo, NULL))) Abort(); -#elif !defined __CELLOS_LV2__ +#else glGenBuffers(1, &m_data->m_vbo); m_data->m_memory = new uint8_t[size]; #endif @@ -543,7 +552,7 @@ VertexBuffer::~VertexBuffer() #if defined USE_D3D9 || defined _XBOX if (FAILED(m_data->m_vbo->Release())) Abort(); -#elif !defined __CELLOS_LV2__ +#else glDeleteBuffers(1, &m_data->m_vbo); delete[] m_data->m_memory; #endif @@ -560,7 +569,7 @@ void *VertexBuffer::Lock(size_t offset, size_t size) if (FAILED(m_data->m_vbo->Lock(offset, size, (void **)&ret, 0))) Abort(); return ret; -#elif !defined __CELLOS_LV2__ +#else return m_data->m_memory + offset; #endif } @@ -572,7 +581,7 @@ void VertexBuffer::Unlock() #if defined USE_D3D9 || defined _XBOX if (FAILED(m_data->m_vbo->Unlock())) Abort(); -#elif !defined __CELLOS_LV2__ +#else glBindBuffer(GL_ARRAY_BUFFER, m_data->m_vbo); glBufferData(GL_ARRAY_BUFFER, m_data->m_size, m_data->m_memory, GL_STATIC_DRAW);