- enable shader-less rendering. Still very incomplete, but at least the basics are working.

This commit is contained in:
Christoph Oelckers 2016-04-26 16:44:03 +02:00
parent 3b1500438d
commit eb27057853
5 changed files with 69 additions and 26 deletions

View file

@ -110,20 +110,29 @@ FFlatVertexBuffer::~FFlatVertexBuffer()
void FFlatVertexBuffer::BindVBO() void FFlatVertexBuffer::BindVBO()
{ {
glBindBuffer(GL_ARRAY_BUFFER, vbo_id); glBindBuffer(GL_ARRAY_BUFFER, vbo_id);
if (vbo_id != 0) // set this up only if there is an actual buffer. if (gl.glslversion > 0)
{ {
glVertexAttribPointer(VATTR_VERTEX, 3, GL_FLOAT, false, sizeof(FFlatVertex), &VTO->x); if (vbo_id != 0) // set this up only if there is an actual buffer.
glVertexAttribPointer(VATTR_TEXCOORD, 2, GL_FLOAT, false, sizeof(FFlatVertex), &VTO->u); {
glEnableVertexAttribArray(VATTR_VERTEX); glVertexAttribPointer(VATTR_VERTEX, 3, GL_FLOAT, false, sizeof(FFlatVertex), &VTO->x);
glEnableVertexAttribArray(VATTR_TEXCOORD); glVertexAttribPointer(VATTR_TEXCOORD, 2, GL_FLOAT, false, sizeof(FFlatVertex), &VTO->u);
glEnableVertexAttribArray(VATTR_VERTEX);
glEnableVertexAttribArray(VATTR_TEXCOORD);
}
else
{
glDisableVertexAttribArray(VATTR_VERTEX);
glDisableVertexAttribArray(VATTR_TEXCOORD);
}
glDisableVertexAttribArray(VATTR_COLOR);
glDisableVertexAttribArray(VATTR_VERTEX2);
} }
else else
{ {
glDisableVertexAttribArray(VATTR_VERTEX); glDisableClientState(GL_VERTEX_ARRAY);
glDisableVertexAttribArray(VATTR_TEXCOORD); glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glDisableClientState(GL_COLOR_ARRAY);
} }
glDisableVertexAttribArray(VATTR_COLOR);
glDisableVertexAttribArray(VATTR_VERTEX2);
} }
//========================================================================== //==========================================================================

View file

@ -134,10 +134,19 @@ void FModelVertexBuffer::BindVBO()
{ {
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ibo_id); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ibo_id);
glBindBuffer(GL_ARRAY_BUFFER, vbo_id); glBindBuffer(GL_ARRAY_BUFFER, vbo_id);
glEnableVertexAttribArray(VATTR_VERTEX); if (gl.glslversion > 0)
glEnableVertexAttribArray(VATTR_TEXCOORD); {
glEnableVertexAttribArray(VATTR_VERTEX2); glEnableVertexAttribArray(VATTR_VERTEX);
glDisableVertexAttribArray(VATTR_COLOR); glEnableVertexAttribArray(VATTR_TEXCOORD);
glEnableVertexAttribArray(VATTR_VERTEX2);
glDisableVertexAttribArray(VATTR_COLOR);
}
else
{
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glDisableClientState(GL_COLOR_ARRAY);
}
} }
//=========================================================================== //===========================================================================
@ -222,9 +231,18 @@ void FModelVertexBuffer::UnlockIndexBuffer()
unsigned int FModelVertexBuffer::SetupFrame(unsigned int frame1, unsigned int frame2) unsigned int FModelVertexBuffer::SetupFrame(unsigned int frame1, unsigned int frame2)
{ {
glBindBuffer(GL_ARRAY_BUFFER, vbo_id); glBindBuffer(GL_ARRAY_BUFFER, vbo_id);
glVertexAttribPointer(VATTR_VERTEX, 3, GL_FLOAT, false, sizeof(FModelVertex), &VMO[frame1].x); if (gl.glslversion > 0)
glVertexAttribPointer(VATTR_TEXCOORD, 2, GL_FLOAT, false, sizeof(FModelVertex), &VMO[frame1].u); {
glVertexAttribPointer(VATTR_VERTEX2, 3, GL_FLOAT, false, sizeof(FModelVertex), &VMO[frame2].x); glVertexAttribPointer(VATTR_VERTEX, 3, GL_FLOAT, false, sizeof(FModelVertex), &VMO[frame1].x);
glVertexAttribPointer(VATTR_TEXCOORD, 2, GL_FLOAT, false, sizeof(FModelVertex), &VMO[frame1].u);
glVertexAttribPointer(VATTR_VERTEX2, 3, GL_FLOAT, false, sizeof(FModelVertex), &VMO[frame2].x);
}
else
{
// only used for single frame models so there is no vertex2 here, which has no use without a shader.
glVertexPointer(3, GL_FLOAT, sizeof(FModelVertex), &VMO[frame1].x);
glTexCoordPointer(2, GL_FLOAT, sizeof(FModelVertex), &VMO[frame1].u);
}
return frame1; return frame1;
} }

View file

@ -316,9 +316,12 @@ void FRenderState::ApplyMatrices()
void FRenderState::ApplyLightIndex(int index) void FRenderState::ApplyLightIndex(int index)
{ {
if (index > -1 && GLRenderer->mLights->GetBufferType() == GL_UNIFORM_BUFFER) if (gl.lightmethod != LM_SOFTWARE)
{ {
index = GLRenderer->mLights->BindUBO(index); if (index > -1 && GLRenderer->mLights->GetBufferType() == GL_UNIFORM_BUFFER)
{
index = GLRenderer->mLights->BindUBO(index);
}
activeShader->muLightIndex.Set(index);
} }
activeShader->muLightIndex.Set(index);
} }

View file

@ -87,13 +87,25 @@ FSkyVertexBuffer::~FSkyVertexBuffer()
void FSkyVertexBuffer::BindVBO() void FSkyVertexBuffer::BindVBO()
{ {
glBindBuffer(GL_ARRAY_BUFFER, vbo_id); glBindBuffer(GL_ARRAY_BUFFER, vbo_id);
glVertexAttribPointer(VATTR_VERTEX, 3, GL_FLOAT, false, sizeof(FSkyVertex), &VSO->x); if (gl.glslversion > 0)
glVertexAttribPointer(VATTR_TEXCOORD, 2, GL_FLOAT, false, sizeof(FSkyVertex), &VSO->u); {
glVertexAttribPointer(VATTR_COLOR, 4, GL_UNSIGNED_BYTE, true, sizeof(FSkyVertex), &VSO->color); glVertexAttribPointer(VATTR_VERTEX, 3, GL_FLOAT, false, sizeof(FSkyVertex), &VSO->x);
glEnableVertexAttribArray(VATTR_VERTEX); glVertexAttribPointer(VATTR_TEXCOORD, 2, GL_FLOAT, false, sizeof(FSkyVertex), &VSO->u);
glEnableVertexAttribArray(VATTR_TEXCOORD); glVertexAttribPointer(VATTR_COLOR, 4, GL_UNSIGNED_BYTE, true, sizeof(FSkyVertex), &VSO->color);
glEnableVertexAttribArray(VATTR_COLOR); glEnableVertexAttribArray(VATTR_VERTEX);
glDisableVertexAttribArray(VATTR_VERTEX2); glEnableVertexAttribArray(VATTR_TEXCOORD);
glEnableVertexAttribArray(VATTR_COLOR);
glDisableVertexAttribArray(VATTR_VERTEX2);
}
else
{
glVertexPointer(3, GL_FLOAT, sizeof(FSkyVertex), &VSO->x);
glTexCoordPointer(2, GL_FLOAT, sizeof(FSkyVertex), &VSO->u);
glColorPointer(4, GL_UNSIGNED_BYTE, sizeof(FSkyVertex), &VSO->color);
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glEnableClientState(GL_COLOR_ARRAY);
}
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------

View file

@ -162,6 +162,7 @@ void gl_LoadExtensions()
{ {
gl.version = 2.11f; gl.version = 2.11f;
gl.glslversion = 0; gl.glslversion = 0;
gl.lightmethod = LM_SOFTWARE;
} }
else if (gl.version < 3.0f) else if (gl.version < 3.0f)
{ {