No, I’m rendering triangles.
Here is a full test:
#include <GL/glew.h>
#include <GL/glut.h>
GLuint fb_, color_rb_[2], object_;
void init_app()
{
glewInit();
glEnable( GL_LINE_SMOOTH );
glGenFramebuffersEXT( 1, &fb_ );
glBindFramebufferEXT( GL_FRAMEBUFFER_EXT, fb_ );
glGenTextures( 2, color_rb_ );
glBindTexture( GL_TEXTURE_2D, color_rb_[0] );
glTexImage2D( GL_TEXTURE_2D, 0, GL_RGB32F_ARB, 1024, 1024, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0 );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE );
glFramebufferTexture2DEXT( GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, color_rb_[0], 0 );
glBindTexture( GL_TEXTURE_2D, color_rb_[1] );
glTexImage2D( GL_TEXTURE_2D, 0, GL_RGB32F_ARB, 1024, 1024, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0 );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE );
glFramebufferTexture2DEXT( GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT1_EXT, GL_TEXTURE_2D, color_rb_[1], 0 );
GLenum status = glCheckFramebufferStatusEXT( GL_FRAMEBUFFER_EXT );
glBindFramebufferEXT( GL_FRAMEBUFFER_EXT, 0 );
char const vshader[] =
"void main()
"
"{
"
" gl_Position = gl_MultiTexCoord0*vec4( 2., 2., 1., 1. ) - vec4( 1., 1., 0., 0. );
"
"}
";
char const fshader[] =
"uniform float fill;
"
"void main()
"
"{
"
" gl_FragColor.x = fill;"
"}
";
object_ = glCreateProgram();
GLuint shader_object = glCreateShader( GL_VERTEX_SHADER );
GLchar const * text = vshader;
GLint length = sizeof(vshader)-1;
glShaderSource( shader_object, 1, &text, &length );
glCompileShader( shader_object );
GLint compiled = 0;
glGetShaderiv( shader_object, GL_COMPILE_STATUS, &compiled );
if( compiled )
glAttachShader( object_, shader_object );
glDeleteShader( shader_object );
shader_object = glCreateShader( GL_FRAGMENT_SHADER );
text = fshader;
length = sizeof(fshader)-1;
glShaderSource( shader_object, 1, &text, &length );
glCompileShader( shader_object );
compiled = 0;
glGetShaderiv( shader_object, GL_COMPILE_STATUS, &compiled );
if( compiled )
glAttachShader( object_, shader_object );
glDeleteShader( shader_object );
glLinkProgram( object_ );
GLint linked = 0;
glGetProgramiv( object_, GL_LINK_STATUS, &linked );
glUseProgram( object_ );
GLuint fill_uni = glGetUniformLocation( object_, "fill" );
glUseProgram( 0 );
glBindFramebufferEXT( GL_FRAMEBUFFER_EXT, fb_ );
glDrawBuffer( GL_COLOR_ATTACHMENT0_EXT + 1 );
glReadBuffer( GL_COLOR_ATTACHMENT0_EXT + 1 );
glActiveTexture( GL_TEXTURE1 );
glBindTexture( GL_TEXTURE_2D, color_rb_[0] );
glActiveTexture( GL_TEXTURE0 );
glViewport( 0, 0, 1024, 1024 );
glUseProgram( object_ );
glUniform1f( fill_uni, -1.f );
glBegin( GL_TRIANGLE_STRIP );
glTexCoord2f( 0.f, 1.f );
glVertex2f( 0.f, 1.f );
glTexCoord2f( 0.f, 0.f );
glVertex2f( 0.f, 0.f );
glTexCoord2f( 1.f, 1.f );
glVertex2f( 1.f, 1.f );
glTexCoord2f( 1.f, 0.f );
glVertex2f( 1.f, 0.f );
glEnd();
glBindFramebufferEXT( GL_FRAMEBUFFER_EXT, 0 );
glUseProgram( 0 );
}
int main( int argc, char* argv[] )
{
glutInit( &argc, argv );
glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH | GLUT_RGB );
glutCreateWindow( "test" );
glutReshapeWindow( 800, 600 );
init_app();
return 0;
}
I get AV on glBegin call. This happens on RADEON 9550.