瀏覽代碼

gpu: fixed vbo attribute binding when one of the attribute on the buffer does not exist in the shader

undefined
Benlitz Sam Hocevar <sam@hocevar.net> 11 年之前
父節點
當前提交
1a2bfe6609
共有 2 個文件被更改,包括 27 次插入24 次删除
  1. +0
    -1
      src/gpu/shader.cpp
  2. +27
    -23
      src/gpu/vertexbuffer.cpp

+ 0
- 1
src/gpu/shader.cpp 查看文件

@@ -342,7 +342,6 @@ ShaderAttrib Shader::GetAttribLocation(char const *attr,
if (l < 0)
{
Log::Warn("tried to query invalid attribute: %s\n", attr);
l = 0;
}
else
{


+ 27
- 23
src/gpu/vertexbuffer.cpp 查看文件

@@ -356,7 +356,8 @@ void VertexDeclaration::SetStream(VertexBuffer *vb, ShaderAttrib attr1,
uint32_t index = l[n].m_flags & 0xffff;

# if !defined __CELLOS_LV2__
glEnableVertexAttribArray((GLint)reg);
if (reg != 0xffffffff)
glEnableVertexAttribArray((GLint)reg);
# else
switch (usage)
{
@@ -438,32 +439,35 @@ void VertexDeclaration::SetStream(VertexBuffer *vb, ShaderAttrib attr1,


# if !defined __CELLOS_LV2__
if (tlut[type_index].type == GL_FLOAT
|| tlut[type_index].type == GL_DOUBLE
|| tlut[type_index].type == GL_BYTE
|| tlut[type_index].type == GL_UNSIGNED_BYTE
if (reg != 0xffffffff)
{
if (tlut[type_index].type == GL_FLOAT
|| tlut[type_index].type == GL_DOUBLE
|| tlut[type_index].type == GL_BYTE
|| tlut[type_index].type == GL_UNSIGNED_BYTE
# if defined USE_GLEW && !defined __APPLE__
/* If this is not available, don't use it */
|| !glVertexAttribIPointer
/* If this is not available, don't use it */
|| !glVertexAttribIPointer
# endif
|| false)
{
/* Normalize unsigned bytes by default, because it's usually
* some color information. */
GLboolean normalize = (tlut[type_index].type == GL_UNSIGNED_BYTE)
|| (tlut[type_index].type == GL_BYTE);
glVertexAttribPointer((GLint)reg, tlut[type_index].size,
tlut[type_index].type, normalize,
stride, (GLvoid const *)(uintptr_t)offset);
}
|| false)
{
/* Normalize unsigned bytes by default, because it's usually
* some color information. */
GLboolean normalize = (tlut[type_index].type == GL_UNSIGNED_BYTE)
|| (tlut[type_index].type == GL_BYTE);
glVertexAttribPointer((GLint)reg, tlut[type_index].size,
tlut[type_index].type, normalize,
stride, (GLvoid const *)(uintptr_t)offset);
}
# if defined GL_VERSION_3_0
else
{
glVertexAttribIPointer((GLint)reg, tlut[type_index].size,
tlut[type_index].type,
stride, (GLvoid const *)(uintptr_t)offset);
}
else
{
glVertexAttribIPointer((GLint)reg, tlut[type_index].size,
tlut[type_index].type,
stride, (GLvoid const *)(uintptr_t)offset);
}
# endif
}
# else
switch (usage)
{


Loading…
取消
儲存