Skip to content

Commit 3aa9b76

Browse files
committed
UPBGE: Use vertex array object for RAS_OpenGLRasterizer::ScreenPlane.
1 parent a99d456 commit 3aa9b76

File tree

2 files changed

+27
-30
lines changed

2 files changed

+27
-30
lines changed

source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp

Lines changed: 26 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -109,8 +109,9 @@ static const int openGLBlendFuncEnums[] = {
109109
RAS_OpenGLRasterizer::ScreenPlane::ScreenPlane()
110110
{
111111
// Generate the VBO and IBO for screen overlay plane.
112-
glGenBuffersARB(1, &m_vbo);
113-
glGenBuffersARB(1, &m_ibo);
112+
glGenBuffers(1, &m_vbo);
113+
glGenBuffers(1, &m_ibo);
114+
glGenVertexArrays(1, &m_vao);
114115

115116
// Vertexes for screen plane, it contains the vertex position (3 floats) and the vertex uv after (2 floats, total size = 5 floats).
116117
static const float vertices[] = {
@@ -123,50 +124,45 @@ RAS_OpenGLRasterizer::ScreenPlane::ScreenPlane()
123124
// Indices for screen plane.
124125
static const GLubyte indices[] = {3, 2, 1, 0};
125126

127+
glBindVertexArray(m_vao);
128+
126129
// Send indices in the sreen plane IBO.
127-
glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, m_ibo);
130+
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_ibo);
128131
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);
129132

130133
// Send vertexes in the screen plane VBO.
131-
glBindBufferARB(GL_ARRAY_BUFFER_ARB, m_vbo);
134+
glBindBuffer(GL_ARRAY_BUFFER, m_vbo);
132135
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
133136

134-
// Unbind modified VBOs
135-
glBindBufferARB(GL_ARRAY_BUFFER_ARB, 0);
136-
glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, 0);
137+
// Enable vertex/uv pointer.
138+
glEnableClientState(GL_VERTEX_ARRAY);
139+
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
140+
141+
// Bind vertex/uv pointer with VBO offset. (position = 0, uv = 3 * float, stride = 5 * float).
142+
glVertexPointer(3, GL_FLOAT, sizeof(float) * 5, 0);
143+
glTexCoordPointer(2, GL_FLOAT, sizeof(float) * 5, ((char *)nullptr) + sizeof(float) * 3);
144+
145+
// Unbind VBO
146+
glBindBuffer(GL_ARRAY_BUFFER, 0);
147+
148+
glBindVertexArray(0);
137149
}
138150

139151
RAS_OpenGLRasterizer::ScreenPlane::~ScreenPlane()
140152
{
141-
// Delete screen overlay plane VBO/IBO
142-
glDeleteBuffersARB(1, &m_vbo);
143-
glDeleteBuffersARB(1, &m_ibo);
153+
// Delete screen overlay plane VBO/IBO/VAO
154+
glDeleteVertexArrays(1, &m_vao);
155+
glDeleteBuffers(1, &m_vbo);
156+
glDeleteBuffers(1, &m_ibo);
144157
}
145158

146159
inline void RAS_OpenGLRasterizer::ScreenPlane::Render()
147160
{
148-
// Bind screen plane VBO/IBO
149-
glBindBufferARB(GL_ARRAY_BUFFER_ARB, m_vbo);
150-
glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, m_ibo);
151-
152-
// Enable vertex/uv pointer.
153-
glEnableClientState(GL_VERTEX_ARRAY);
154-
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
155-
156-
// Bind vertex/uv pointer with VBO offset. (position = 0, uv = 3*float, stride = 5*float).
157-
glVertexPointer(3, GL_FLOAT, sizeof(float) * 5, 0);
158-
glTexCoordPointer(2, GL_FLOAT, sizeof(float) * 5, ((char *)nullptr) + sizeof(float) * 3);
159-
160-
// Draw in traignel fan mode to reduce IBO size.
161+
glBindVertexArray(m_vao);
162+
// Draw in triangle fan mode to reduce IBO size.
161163
glDrawElements(GL_TRIANGLE_FAN, 4, GL_UNSIGNED_BYTE, 0);
162164

163-
// Disable vertex/uv pointer.
164-
glDisableClientState(GL_VERTEX_ARRAY);
165-
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
166-
167-
// Unbind screen plane VBO/IBO.
168-
glBindBufferARB(GL_ARRAY_BUFFER_ARB, 0);
169-
glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, 0);
165+
glBindVertexArray(0);
170166
}
171167

172168
RAS_OpenGLRasterizer::RAS_OpenGLRasterizer(RAS_Rasterizer *rasterizer)

source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ class RAS_OpenGLRasterizer
4949
private:
5050
unsigned int m_vbo;
5151
unsigned int m_ibo;
52+
unsigned int m_vao;
5253

5354
public:
5455
ScreenPlane();

0 commit comments

Comments
 (0)