- renamed WipeVertexBuffer to FSimpleVertexBuffer because this will be useful elsewhere, too.

This commit is contained in:
Christoph Oelckers 2016-08-07 00:40:31 +02:00
parent 52537b0af2
commit 04c59b434b
4 changed files with 41 additions and 48 deletions

View file

@ -71,6 +71,34 @@ FVertexBuffer::~FVertexBuffer()
}
}
void FSimpleVertexBuffer::BindVBO()
{
glBindBuffer(GL_ARRAY_BUFFER, vbo_id);
if (gl.glslversion > 0)
{
glVertexAttribPointer(VATTR_VERTEX, 3, GL_FLOAT, false, sizeof(FFlatVertex), &VTO->x);
glVertexAttribPointer(VATTR_TEXCOORD, 2, GL_FLOAT, false, sizeof(FFlatVertex), &VTO->u);
glDisableVertexAttribArray(VATTR_COLOR);
glDisableVertexAttribArray(VATTR_VERTEX2);
}
else
{
glVertexPointer(3, GL_FLOAT, sizeof(FFlatVertex), &VTO->x);
glTexCoordPointer(2, GL_FLOAT, sizeof(FFlatVertex), &VTO->u);
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glDisableClientState(GL_COLOR_ARRAY);
}
}
void FSimpleVertexBuffer::set(FFlatVertex *verts, int count)
{
glBindBuffer(GL_ARRAY_BUFFER, vbo_id);
gl_RenderState.SetVertexBuffer(this);
glBufferData(GL_ARRAY_BUFFER, count * sizeof(*verts), verts, GL_STREAM_DRAW);
}
//==========================================================================
//
//

View file

@ -41,6 +41,16 @@ struct FFlatVertex
#define VTO ((FFlatVertex*)NULL)
class FSimpleVertexBuffer : public FVertexBuffer
{
TArray<FFlatVertex> mBuffer;
public:
FSimpleVertexBuffer()
{
}
void BindVBO();
void set(FFlatVertex *verts, int count);
};
class FFlatVertexBuffer : public FVertexBuffer
{

View file

@ -7,6 +7,7 @@
#endif
class FHardwareTexture;
class FSimpleVertexBuffer;
extern long gl_frameMS;
extern long gl_frameCount;
@ -94,10 +95,9 @@ private:
class Wiper
{
class WipeVertexBuffer;
protected:
WipeVertexBuffer *mVertexBuf;
FSimpleVertexBuffer *mVertexBuf;
void MakeVBO(OpenGLFrameBuffer *fb);

View file

@ -271,51 +271,6 @@ void OpenGLFrameBuffer::WipeCleanup()
FMaterial::ClearLastTexture();
}
//==========================================================================
//
// The wiper vertex buffer
//
// Note that this will recreate the buffer each frame, although
// only for melt its contents will change.
//
// But since this is no time critical code, ease of implementation
// was chosen over maximum efficiency.
//
//==========================================================================
class OpenGLFrameBuffer::Wiper::WipeVertexBuffer : public FVertexBuffer
{
public:
WipeVertexBuffer()
{
}
void BindVBO()
{
glBindBuffer(GL_ARRAY_BUFFER, vbo_id);
if (gl.glslversion > 0)
{
glVertexAttribPointer(VATTR_VERTEX, 3, GL_FLOAT, false, sizeof(FFlatVertex), &VTO->x);
glVertexAttribPointer(VATTR_TEXCOORD, 2, GL_FLOAT, false, sizeof(FFlatVertex), &VTO->u);
glDisableVertexAttribArray(VATTR_COLOR);
glDisableVertexAttribArray(VATTR_VERTEX2);
}
else
{
glVertexPointer(3, GL_FLOAT, sizeof(FFlatVertex), &VTO->x);
glTexCoordPointer(2, GL_FLOAT, sizeof(FFlatVertex), &VTO->u);
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glDisableClientState(GL_COLOR_ARRAY);
}
}
void set(FFlatVertex *verts, int count)
{
glBindBuffer(GL_ARRAY_BUFFER, vbo_id);
gl_RenderState.SetVertexBuffer(this);
glBufferData(GL_ARRAY_BUFFER, count * sizeof(*verts), verts, GL_STREAM_DRAW);
}
};
//==========================================================================
//
// OpenGLFrameBuffer :: Wiper Constructor
@ -323,7 +278,7 @@ public:
//==========================================================================
OpenGLFrameBuffer::Wiper::Wiper()
{
mVertexBuf = new WipeVertexBuffer;
mVertexBuf = new FSimpleVertexBuffer;
}
OpenGLFrameBuffer::Wiper::~Wiper()