| Newsgroups |
gmane.games.devel.opengl |
| Organization |
Fat City Network Services, San Diego, California |
| Message-ID |
<[email protected]> |
<div><br></div>Hello Guys<br><br>I am playing a little bit with FBO. By t=
he
way,=20
I am rendering a little red <br>quad in the middle of the FBO. It works
perfect=20
while I use<br><br> glTexImage2D(GL_TEXTURE_RECTANGLE_NV, 0, 4, w, =
h,
0,=20
GL_RGBA, <br>GL_UNSIGNED_BYTE, NULL);<br><br>yeah...a 8 bits FBO. I can
change=20
GL_UNSIGNED_BYTE by GL_FLOAT, and I always <br>get a 8 bits FBO... (well
known=20
behaviour).<br><br>But, If I just change that command by<br><br> =20
glTexImage2D(GL_TEXTURE_RECTANGLE_NV, 0, GL_FLOAT_RGBA16_NV, w, h,=20
<br>0,GL_RGBA, GL_UNSIGNED_SHORT, NULL);<br><br>or even by<br><br> =20
glTexImage2D(GL_TEXTURE_RECTANGLE_NV, 0, GL_FLOAT_RGBA32_NV, w, h,=20
<br>0,GL_RGBA, GL_FLOAT, NULL);<br><br>then, I get a full screen red imag=
e
(even=20
if I comment the glBegin(QUADS) - <br>glEnd() block to render the quad).
The=20
entire FBO gets the color of my <br>glColor3ub(255,0,0).<br><br>I have te=
st=20
every OpenGL code line with glGetError(), and there is not any <br>error.=
I
also=20
installed latest glew and drivers for my 8800 NVidia graphics=20
<br>board.<br><br>I hope some of you could have a suggestion about what I
am=20
doing wrong.<br><br>Thanks a lot!<br>Rhadam=E9s<br><br><br>#include
"glew.h"<br>#include <gl/glut.h><br>#include
<stdio.h><br>#include <stdlib.h><br>#include
<iostream><br><br>#define GL_TEXTURE_RECTANGLE
GL_TEXTURE_RECTANGLE_NV<br><br>int height=3D0, width=3D0;<br>GLuint
g_fb=3D0;<br>GLuint g_tex=3D0;<br>GLuint g_depth=3D0;<br><br>using namesp=
ace
std;<br><br><br>void Abort(char *msg)<br>{<br> printf(msg);<br>&nbs=
p;
exit(1);<br>}<br><br><br><br>void CheckErrorsGL(const char* location=3DNU=
LL,
ostream& ostr=3D std::cerr ) <br>{<br> GLuint errnum;<br>
const char *errstr;<br> int counter =3D 0;<br> while (errnum =
=3D
glGetError()) <br> {<br> errstr =3D
reinterpret_cast<const char
*>(gluErrorString(errnum));<br> if(errstr)
<br> {<br> ostr <<
errstr; <br> }<br> else
<br> {<br> ostr <<
"Error " << errnum;<br> }<br>
<br> if(location)
<br> ostr << " at " <<
location; <br> ost=
r
<< endl;<br> counter++;<br> }<br> if
(counter)<br> Abort("Application cannot
continue!\n");<br><br> return;<br>}<br><br>void
TestOpenGLError()<br>{<br> CheckErrorsGL(NULL);<br>}<br><br><br>voi=
d
Draw()<br>{<br> // working with main object (the
application)<br> if (!width || !height)<br>
return;<br><br> glClearColor(0,0,0,0);<br>
glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT); <br><br><br>
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, g_fb);
TestOpenGLError();<br> glDrawBuffer( GL_COLOR_ATTACHMENT0_EXT
); TestOpenGLError();<br> glViewport(0,0,width, height); =
;
TestOpenGLError();<br> glClearColor(0,0,0,0);
TestOpenGLError();<br> glClear(GL_COLOR_BUFFER_BIT);
TestOpenGLError();<br><br><br> float size =3D 100.0f;<br><br>
glColor3f(1,0,0.5f);<br> glBegin(GL_QUADS);<br>
glVertex2f(width*0.5f - size, height*0.5f - size);<br>
glVertex2f(width*0.5f - size, height*0.5f + size);<br>
glVertex2f(width*0.5f + size, height*0.5f + size);<br>
glVertex2f(width*0.5f + size, height*0.5f - size);<br>
glEnd();<br> //glColor3ub(0,0,0);<br><br><br><br> <br>
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);<br> glDrawBuffer(
GL_BACK );<br> glViewport(0,0,width, height);
TestOpenGLError();<br> glFinish();<br>
glEnable(GL_TEXTURE_RECTANGLE);<br>
glBindTexture(GL_TEXTURE_RECTANGLE, g_tex);
TestOpenGLError();<br> glEnable(GL_TEXTURE_RECTANGLE);
TestOpenGLError();<br> <br><br>
glBegin(GL_QUADS);<br> glTexCoord2f(0.0f,
0.0f);<br> glVertex2f(0.0f, 0.0f);<br>  =
;
glTexCoord2f(0.0f, height);<br> glVertex2f(0.0f,
height);<br> glTexCoord2f(width,
height);<br> glVertex2f(width,
height);<br> glTexCoord2f(width,
0.0f);<br> glVertex2f(width, 0.0f);<br>
glEnd();<br><br> glDisable(GL_TEXTURE_RECTANGLE);
TestOpenGLError();<br> // back to 3D mode<br><br><br>
glFinish();<br> glutSwapBuffers();<br>}<br><br>void
Init()<br>{<br> GLenum err =3D glewInit();<br> if (GLEW_OK !=3D
err)<br> // Problem: glewInit failed, something is
seriously wrong. <br> Abort("init
error\n");<br><br><br> TestOpenGLError();<br>
glGenFramebuffersEXT(1,
&g_fb); &n=
bsp
; TestOpenGLError();<br> glBindTexture(GL_TEXTURE_2D,
0); &nbs=
p;
TestOpenGLError();<br> glBindTexture(GL_TEXTURE_RECTANGLE,
0); TestOpenGLError();<br>
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, g_fb);
TestOpenGLError();<br><br> // create the texture for the
color<br> glGenTextures(1,
&g_tex); &=
nbs
p;
TestOpenGLError();<br> glBindTexture(GL_TEXTURE_RECTANGLE,
g_tex); TestOpenGLError();<br><br> glTexParameteri
(GL_TEXTURE_RECTANGLE, GL_TEXTURE_WRAP_S, GL_CLAMP);<br>
glTexParameteri (GL_TEXTURE_RECTANGLE, GL_TEXTURE_WRAP_T,
GL_CLAMP);<br> glTexParameteri (GL_TEXTURE_RECTANGLE,
GL_TEXTURE_MAG_FILTER, GL_NEAREST);<br> glTexParameteri
(GL_TEXTURE_RECTANGLE, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
TestOpenGLError(); &=
nbs
p; <br><br> //glTexImage2D(GL_TEXTURE_RECTANGLE, 0, 4, width, heigh=
t,
0, GL_RGBA, GL_UNSIGNED_BYTE,
NULL);
//works<br> //glTexImage2D(GL_TEXTURE_RECTANGLE, 0, GL_RGBA16, widt=
h,
height, 0,GL_RGBA, GL_UNSIGNED_SHORT, NULL); //works<br>
//glTexImage2D(GL_TEXTURE_RECTANGLE, 0, GL_FLOAT_RGBA32_NV, w, h,
0,GL_RGBA, GL_FLOAT,
NULL); //does
not work<br> glTexImage2D(GL_TEXTURE_RECTANGLE, 0,
GL_FLOAT_RGBA16_NV, width, height, 0,GL_RGBA, GL_UNSIGNED_SHORT, NULL);
<br> <br> TestOpenGLError();<br>
glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT,GL_COLOR_ATTACHMENT0_EXT,GL_=
TEX
TURE_RECTANGLE,g_tex, 0);<br> if
(glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT) !=3D
GL_FRAMEBUFFER_COMPLETE_EXT)<br> Abort("Error adding
color to FBO\n");<br> TestOpenGLError();<br><br>
glMatrixMode(GL_PROJECTION);<br> glLoadIdentity();<br>
glOrtho(0,width,0,height,-1,100.0f);<br>
glMatrixMode(GL_TEXTURE);<br> glLoadIdentity();<br>
glMatrixMode(GL_MODELVIEW);<br> glLoadIdentity();<br>
glTranslatef(0,0,-5);<br>}<br><br>void Reshape(int w, int h)<br>{<br>&nbs=
p;
width =3D w;<br> height=3D h;<br>
glViewport(0,0,width,height);<br> Init();<br>}<br><br><br>void
main(int argc, char **argv)<br>{<br> glutInit(&argc,
argv);<br> glutInitDisplayString("double blue>=3D8 red>=3D8
alpha>=3D8 green>=3D8 depth=3D32");// rgba>=3D8 depth>=3D24")=
;<br>
glutInitWindowSize(640,480);<br>
glutInitWindowPosition(0,0);<br> glutCreateWindow("test");<br> =
;
glutSetWindowTitle("test");<br><br><br> glutIdleFunc(Draw);<br>&nbs=
p;
glutDisplayFunc(Draw);<br> glutReshapeFunc(Reshape);<br><br>
glutShowWindow();<br> glutMainLoop();<br><br>}<br>
-----
FAQ and OpenGL Resources at:
http://www.geocities.com/SiliconValley/Hills/9956/OpenGL
--
Author: [email protected]
INET: [email protected]
Fat City Hosting, San Diego, California -- http://www.fatcity.com
---------------------------------------------------------------------
To REMOVE yourself from this mailing list, send an E-Mail message
to: [email protected] (note EXACT spelling of 'ListGuru') and in
the message BODY, include a line containing: UNSUB OPENGL-GAMEDEV-L
(or the name of mailing list you want to be removed from). You may
also send the HELP command for other information (like subscribing).