glGetActiveUniformARB returns incorrect type for sampler2DRect uniforms - instead of SAMPLER_2D_RECT_ARB I get GL_TEXTURE_RECTANGLE_ARB.
nvidia, driver version: 67.02
here is test program to demonstrate this:
#include <iostream>
#include <GL/glut.h>
#include <GL/glext.h>
PFNGLCREATEPROGRAMOBJECTARBPROC glCreateProgramObjectARB = 0;
PFNGLCREATESHADEROBJECTARBPROC glCreateShaderObjectARB = 0;
PFNGLSHADERSOURCEARBPROC glShaderSourceARB = 0;
PFNGLCOMPILESHADERARBPROC glCompileShaderARB = 0;
PFNGLGETACTIVEATTRIBARBPROC glGetActiveUniformARB = 0;
PFNGLATTACHOBJECTARBPROC glAttachObjectARB = 0;
PFNGLDELETEOBJECTARBPROC glDeleteObjectARB = 0;
PFNGLLINKPROGRAMARBPROC glLinkProgramARB = 0;
const GLcharARB * shaderSrc =
"uniform sampler2DRect tex;
"
"void main()
"
"{
"
" gl_FragColor = texture2DRect( tex, gl_TexCoord[0].xy );
"
"}
";
int main( int argc, char * argv[] )
{
glutInit( &argc, argv );
glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH | GLUT_RGB );
glutCreateWindow( "test" );
glCreateProgramObjectARB = (PFNGLCREATEPROGRAMOBJECTARBPROC)wglGetProcAddress( "glCreateProgramObjectARB" );
glCreateShaderObjectARB = (PFNGLCREATESHADEROBJECTARBPROC)wglGetProcAddress( "glCreateShaderObjectARB" );
glShaderSourceARB = (PFNGLSHADERSOURCEARBPROC)wglGetProcAddress( "glShaderSourceARB" );
glCompileShaderARB = (PFNGLCOMPILESHADERARBPROC)wglGetProcAddress( "glCompileShaderARB" );
glAttachObjectARB = (PFNGLATTACHOBJECTARBPROC)wglGetProcAddress( "glAttachObjectARB" );
glDeleteObjectARB = (PFNGLDELETEOBJECTARBPROC)wglGetProcAddress( "glDeleteObjectARB" );
glLinkProgramARB = (PFNGLLINKPROGRAMARBPROC)wglGetProcAddress( "glLinkProgramARB" );
glGetActiveUniformARB = (PFNGLGETACTIVEATTRIBARBPROC)wglGetProcAddress( "glGetActiveUniformARB" );
GLhandleARB po = glCreateProgramObjectARB();
GLhandleARB so = glCreateShaderObjectARB( GL_FRAGMENT_SHADER_ARB );
glShaderSourceARB( so, 1, &shaderSrc, 0 );
glCompileShaderARB( so );
glAttachObjectARB( po, so );
glDeleteObjectARB( so );
glLinkProgramARB( po );
GLsizei length;
GLint size;
GLenum type;
GLcharARB name[256];
glGetActiveUniformARB( po, 0, sizeof(name), &length, &size, &type, name );
if( type == GL_TEXTURE_RECTANGLE_ARB )
std::cout << "type == GL_TEXTURE_RECTANGLE_ARB
";
return 0;
}