PDA

View Full Version : Drawing an array of lines via glDrawArrays to a texture



dan369
06-23-2012, 09:50 AM
Hi guys,

So this is my first post, recently i've been stuck with the issue of trying to rendering an array of lines to a texture. And for the life of me, i can't even get a single line to appear. :sorrow:
Currently as testing code i just have one line being rendering, or atleast trying to be rendered. It should be rendering a line from X:0, Y:10 to X: 512, Y: 10.
I've never actually rendered anything to a texture before, so im not sure where the problem is. I have to use glCopyTexImage2D as my gpu doesn't support FBOs.

Below Is My Current Render To Texture Code.


void Lightning::RenderToTexture(int Width, int Height, GLuint TexID)
{
// Render Texture
glEnable(GL_TEXTURE_2D);
glEnable(GL_BLEND);
glBlendFunc(GL_ALPHA,GL_ONE_MINUS_SRC_ALPHA);

//Create Vectors
vector<Vector2> v_Points;
vector<unsigned int> indices;

//Push Back Our Initial Starting Position
v_Points.push_back(startPosition); //X:0, Y:10
v_Points.push_back(endPosition); //X:512, Y:10

//Set Up Indices Based on v_Points size!
for (unsigned int i = 0; i < v_Points.size(); i++)
indices.push_back(i);

//Draw Line!
glPushAttrib(GL_CURRENT_BIT);
glColor4ub((GLubyte)color.red, (GLubyte)color.blue, (GLubyte)color.green, (GLubyte)color.alpha);
glLineWidth(lWidth);
glEnableClientState(GL_VERTEX_ARRAY);

glVertexPointer(2, GL_FLOAT, 0, &v_Points[0]);
glDrawArrays(GL_LINE_STRIP, 0, indices.size());

glDisableClientState(GL_VERTEX_ARRAY);
glPopAttrib();
glLoadIdentity();

//Bind Texture
glBindTexture(GL_TEXTURE_2D, TexID);
//Pick Up Texture
glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 0, 0, 512, 512, 0);

//Clear Scene
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glClearColor(1.0f, 1.0f, 0.0f, 0.0f);
}


And It's usage


void Lightning::Draw()
{
RenderToTexture(512, 512, bTexture);

///TEST QUAD RENDERING!
glBindTexture(GL_TEXTURE_2D, bTexture);
TestDraw(0, 0, 512, 512); //Simple GL Quad rendering function
}


And here's an image of the current output;
786

As you can see currently all i see is the white quad :confused:. What should be there is a simple red line. I've only ever attempted to render to a texture today so i'm totally unsure where i could/am going wrong.
Any help with this issue would be greatly appreciated.

V-man
06-23-2012, 05:15 PM
http://www.opengl.org/wiki/Common_Mistakes#Creating_a_Texture

aqnuep
06-23-2012, 07:24 PM
Most likely your texture is incomplete.

Off-topic: I would suggest you to use more modern way to render to a texture. More specifically, use framebuffer objects to render directly to a texture. This way you can avoid the additional copy from the main framebuffer to the texture.