Fix glGetActiveUniform for samplers

TRAC #13522 Original patch by Jim Hauxwell, fixed for full test suite conformance. Signed-off-by: Daniel Koch Author: Nicolas Capens git-svn-id: https://angleproject.googlecode.com/svn/trunk@421 736b8ea6-26fd-11df-bfd4-992fa37f6226
parent cf66ebb8
...@@ -595,7 +595,9 @@ bool Program::setUniform1iv(GLint location, GLsizei count, const GLint *v) ...@@ -595,7 +595,9 @@ bool Program::setUniform1iv(GLint location, GLsizei count, const GLint *v)
Uniform *targetUniform = mUniforms[mUniformIndex[location].index]; Uniform *targetUniform = mUniforms[mUniformIndex[location].index];
targetUniform->dirty = true; targetUniform->dirty = true;
if (targetUniform->type == GL_INT) if (targetUniform->type == GL_INT ||
targetUniform->type == GL_SAMPLER_2D ||
targetUniform->type == GL_SAMPLER_CUBE)
{ {
int arraySize = targetUniform->arraySize; int arraySize = targetUniform->arraySize;
...@@ -949,6 +951,8 @@ void Program::applyUniforms() ...@@ -949,6 +951,8 @@ void Program::applyUniforms()
case GL_FLOAT_MAT2: applyUniformMatrix2fv(location, arraySize, f); break; case GL_FLOAT_MAT2: applyUniformMatrix2fv(location, arraySize, f); break;
case GL_FLOAT_MAT3: applyUniformMatrix3fv(location, arraySize, f); break; case GL_FLOAT_MAT3: applyUniformMatrix3fv(location, arraySize, f); break;
case GL_FLOAT_MAT4: applyUniformMatrix4fv(location, arraySize, f); break; case GL_FLOAT_MAT4: applyUniformMatrix4fv(location, arraySize, f); break;
case GL_SAMPLER_2D:
case GL_SAMPLER_CUBE:
case GL_INT: applyUniform1iv(location, arraySize, i); break; case GL_INT: applyUniform1iv(location, arraySize, i); break;
case GL_INT_VEC2: applyUniform2iv(location, arraySize, i); break; case GL_INT_VEC2: applyUniform2iv(location, arraySize, i); break;
case GL_INT_VEC3: applyUniform3iv(location, arraySize, i); break; case GL_INT_VEC3: applyUniform3iv(location, arraySize, i); break;
...@@ -1737,10 +1741,16 @@ Uniform *Program::createUniform(const D3DXCONSTANT_DESC &constantDescription, st ...@@ -1737,10 +1741,16 @@ Uniform *Program::createUniform(const D3DXCONSTANT_DESC &constantDescription, st
switch (constantDescription.Type) switch (constantDescription.Type)
{ {
case D3DXPT_SAMPLER2D: case D3DXPT_SAMPLER2D:
switch (constantDescription.Columns)
{
case 1: return new Uniform(GL_SAMPLER_2D, name, constantDescription.Elements);
default: UNREACHABLE();
}
break;
case D3DXPT_SAMPLERCUBE: case D3DXPT_SAMPLERCUBE:
switch (constantDescription.Columns) switch (constantDescription.Columns)
{ {
case 1: return new Uniform(GL_INT, name, constantDescription.Elements); case 1: return new Uniform(GL_SAMPLER_CUBE, name, constantDescription.Elements);
default: UNREACHABLE(); default: UNREACHABLE();
} }
break; break;
......
...@@ -25,6 +25,8 @@ int UniformComponentCount(GLenum type) ...@@ -25,6 +25,8 @@ int UniformComponentCount(GLenum type)
case GL_BOOL: case GL_BOOL:
case GL_FLOAT: case GL_FLOAT:
case GL_INT: case GL_INT:
case GL_SAMPLER_2D:
case GL_SAMPLER_CUBE:
return 1; return 1;
case GL_BOOL_VEC2: case GL_BOOL_VEC2:
case GL_FLOAT_VEC2: case GL_FLOAT_VEC2:
...@@ -68,6 +70,8 @@ GLenum UniformComponentType(GLenum type) ...@@ -68,6 +70,8 @@ GLenum UniformComponentType(GLenum type)
case GL_FLOAT_MAT4: case GL_FLOAT_MAT4:
return GL_FLOAT; return GL_FLOAT;
case GL_INT: case GL_INT:
case GL_SAMPLER_2D:
case GL_SAMPLER_CUBE:
case GL_INT_VEC2: case GL_INT_VEC2:
case GL_INT_VEC3: case GL_INT_VEC3:
case GL_INT_VEC4: case GL_INT_VEC4:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment