diff --git a/src/gpu/shader.cpp b/src/gpu/shader.cpp index 67d1abdc..0f8c53f3 100644 --- a/src/gpu/shader.cpp +++ b/src/gpu/shader.cpp @@ -326,8 +326,13 @@ ShaderAttrib Shader::GetAttribLocation(char const *attr, ret.m_flags |= (uint64_t)(uint16_t)index; #if defined USE_D3D9 || defined _XBOX #elif !defined __CELLOS_LV2__ - ret.m_flags |= (uint64_t) - (uint32_t)glGetAttribLocation(data->prog_id, attr) << 32; + GLint l = glGetAttribLocation(data->prog_id, attr); + if (l < 0) + { + Log::Warn("tried to query invalid attribute: %s\n", attr); + l = 0; + } + ret.m_flags |= (uint64_t)(uint32_t)l << 32; #else /* FIXME: can we do this at all on the PS3? */ #endif diff --git a/src/gpu/vertexbuffer.cpp b/src/gpu/vertexbuffer.cpp index 9ebdaf56..fa66221a 100644 --- a/src/gpu/vertexbuffer.cpp +++ b/src/gpu/vertexbuffer.cpp @@ -374,6 +374,13 @@ void VertexDeclaration::SetStream(VertexBuffer *vb, ShaderAttrib attr1, if (usage_index++ == index) break; + if (attr_index == m_count) + { + Log::Error("stream #%d with usage %x not found in declaration\n", + index, usage); + attr_index = 0; + } + /* Now compute the stride and offset up to this stream index */ int stride = 0, offset = 0; for (int i = 0; i < m_count; i++)