@@ -23,7 +23,9 @@ THE SOFTWARE.
23
23
24
24
#ifdef __APPLE__
25
25
#include < OpenCL/OpenCL.h>
26
- #include < OpenGL/OpenGL.h>
26
+ #define GLFW_INCLUDE_GL3
27
+ #define GLFW_NO_GLU
28
+ #include " GLFW/glfw3.h"
27
29
#elif WIN32
28
30
#define NOMINMAX
29
31
#include < Windows.h>
@@ -33,6 +35,7 @@ THE SOFTWARE.
33
35
#include < CL/cl.h>
34
36
#include < GL/glew.h>
35
37
#include < GL/glx.h>
38
+ #include " GLFW/glfw3.h"
36
39
#endif
37
40
38
41
@@ -98,6 +101,7 @@ std::unique_ptr<Baikal::PerspectiveCamera> g_camera;
98
101
GLuint g_vertex_buffer;
99
102
GLuint g_index_buffer;
100
103
GLuint g_texture;
104
+ GLuint g_vao;
101
105
102
106
int g_window_width = 512 ;
103
107
int g_window_height = 512 ;
@@ -132,6 +136,8 @@ Baikal::Renderer::OutputType g_ouput_type = Baikal::Renderer::OutputType::kColor
132
136
133
137
using namespace tinyobj ;
134
138
139
+ #define CHECK_GL_ERROR assert (glGetError() == 0)
140
+
135
141
136
142
struct OutputData
137
143
{
@@ -193,43 +199,50 @@ void Render(GLFWwindow* window)
193
199
try
194
200
{
195
201
{
196
- glDisable (GL_DEPTH_TEST);
197
- glViewport (0 , 0 , g_window_width, g_window_height);
202
+ int w, h;
203
+ glfwGetFramebufferSize (window, &w, &h);CHECK_GL_ERROR;
204
+ glDisable (GL_DEPTH_TEST);CHECK_GL_ERROR;
205
+ glViewport (0 , 0 , w, h);CHECK_GL_ERROR;
206
+
198
207
199
- glClear (GL_COLOR_BUFFER_BIT);
208
+ glClear (GL_COLOR_BUFFER_BIT);CHECK_GL_ERROR;
209
+ glBindVertexArray (g_vao);CHECK_GL_ERROR;
210
+ // glEnableClientState(GL_VERTEX_ARRAY);CHECK_GL_ERROR;
211
+
212
+
200
213
201
- glBindBuffer (GL_ARRAY_BUFFER, g_vertex_buffer);
202
- glBindBuffer (GL_ELEMENT_ARRAY_BUFFER, g_index_buffer);
203
214
204
215
GLuint program = g_shader_manager->GetProgram (" ../App/GLSL/simple" );
205
- glUseProgram (program);
216
+ glUseProgram (program);CHECK_GL_ERROR;
206
217
207
218
GLuint texloc = glGetUniformLocation (program, " g_Texture" );
208
219
assert (texloc >= 0 );
209
220
210
- glUniform1i (texloc, 0 );
221
+ glUniform1i (texloc, 0 );CHECK_GL_ERROR;
211
222
212
- glActiveTexture (GL_TEXTURE0);
213
- glBindTexture (GL_TEXTURE_2D, g_texture);
223
+ glActiveTexture (GL_TEXTURE0);CHECK_GL_ERROR;
224
+ glBindTexture (GL_TEXTURE_2D, g_texture);CHECK_GL_ERROR;
214
225
215
- GLuint position_attr = glGetAttribLocation (program, " inPosition" );
216
- GLuint texcoord_attr = glGetAttribLocation (program, " inTexcoord" );
217
-
218
- glVertexAttribPointer (position_attr, 3 , GL_FLOAT, GL_FALSE, sizeof (float ) * 5 , 0 );
219
- glVertexAttribPointer (texcoord_attr, 2 , GL_FLOAT, GL_FALSE, sizeof (float ) * 5 , (void *)(sizeof (float ) * 3 ));
220
-
221
- glEnableVertexAttribArray (position_attr);
222
- glEnableVertexAttribArray (texcoord_attr);
226
+
227
+ glEnableVertexAttribArray (0 );CHECK_GL_ERROR;
228
+ glEnableVertexAttribArray (1 );CHECK_GL_ERROR;
229
+
230
+ glBindBuffer (GL_ARRAY_BUFFER, g_vertex_buffer);CHECK_GL_ERROR;
231
+ glBindBuffer (GL_ELEMENT_ARRAY_BUFFER, g_index_buffer);CHECK_GL_ERROR;
223
232
233
+ glVertexAttribPointer (0 , 3 , GL_FLOAT, GL_FALSE, sizeof (float ) * 5 , 0 );CHECK_GL_ERROR;
234
+ glVertexAttribPointer (1 , 2 , GL_FLOAT, GL_FALSE, sizeof (float ) * 5 , (void *)(sizeof (float ) * 3 ));CHECK_GL_ERROR;
224
235
glDrawElements (GL_TRIANGLES, 6 , GL_UNSIGNED_SHORT, nullptr );
225
236
226
- glDisableVertexAttribArray (texcoord_attr);
227
- glBindTexture (GL_TEXTURE_2D, 0 );
228
- glBindBuffer (GL_ARRAY_BUFFER, 0 );
229
- glBindBuffer (GL_ELEMENT_ARRAY_BUFFER, 0 );
230
- glUseProgram (0 );
237
+ glDisableVertexAttribArray (0 );CHECK_GL_ERROR;
238
+ glDisableVertexAttribArray (1 );CHECK_GL_ERROR;
239
+ glBindTexture (GL_TEXTURE_2D, 0 );CHECK_GL_ERROR;
240
+ glBindBuffer (GL_ARRAY_BUFFER, 0 );CHECK_GL_ERROR;
241
+ glBindBuffer (GL_ELEMENT_ARRAY_BUFFER, 0 );CHECK_GL_ERROR;
242
+ glUseProgram (0 );CHECK_GL_ERROR;
243
+ glBindVertexArray (0 );
231
244
232
- glFinish ();
245
+ glFinish ();CHECK_GL_ERROR;
233
246
}
234
247
}
235
248
catch (std::runtime_error& e)
@@ -243,17 +256,17 @@ void InitGraphics()
243
256
{
244
257
g_shader_manager.reset (new ShaderManager ());
245
258
246
- glClearColor (0.0 , 0.0 , 0.0 , 0.0 );
247
- glCullFace (GL_NONE);
248
- glDisable (GL_DEPTH_TEST);
249
- glEnable (GL_TEXTURE_2D);
259
+ glClearColor (0.0 , 0.5 , 0.0 , 0.0 );CHECK_GL_ERROR;
260
+ glDisable (GL_DEPTH_TEST);CHECK_GL_ERROR;
250
261
251
- glGenBuffers (1 , &g_vertex_buffer);
252
- glGenBuffers (1 , &g_index_buffer);
262
+ glGenBuffers (1 , &g_vertex_buffer);CHECK_GL_ERROR;
263
+ glGenBuffers (1 , &g_index_buffer);CHECK_GL_ERROR;
264
+
265
+ glGenVertexArrays (1 , &g_vao);CHECK_GL_ERROR;
253
266
254
267
// create Vertex buffer
255
- glBindBuffer (GL_ARRAY_BUFFER, g_vertex_buffer);
256
- glBindBuffer (GL_ELEMENT_ARRAY_BUFFER, g_index_buffer);
268
+ glBindBuffer (GL_ARRAY_BUFFER, g_vertex_buffer);CHECK_GL_ERROR;
269
+ glBindBuffer (GL_ELEMENT_ARRAY_BUFFER, g_index_buffer);CHECK_GL_ERROR;
257
270
258
271
float quad_vdata[] =
259
272
{
@@ -270,21 +283,21 @@ void InitGraphics()
270
283
};
271
284
272
285
// fill data
273
- glBufferData (GL_ARRAY_BUFFER, sizeof (quad_vdata), quad_vdata, GL_STATIC_DRAW);
274
- glBufferData (GL_ELEMENT_ARRAY_BUFFER, sizeof (quad_idata), quad_idata, GL_STATIC_DRAW);
286
+ glBufferData (GL_ARRAY_BUFFER, sizeof (quad_vdata), quad_vdata, GL_STATIC_DRAW);CHECK_GL_ERROR;
287
+ glBufferData (GL_ELEMENT_ARRAY_BUFFER, sizeof (quad_idata), quad_idata, GL_STATIC_DRAW);CHECK_GL_ERROR;
275
288
276
- glBindBuffer (GL_ARRAY_BUFFER, 0 );
277
- glBindBuffer (GL_ELEMENT_ARRAY_BUFFER, 0 );
289
+ glBindBuffer (GL_ARRAY_BUFFER, 0 );CHECK_GL_ERROR;
290
+ glBindBuffer (GL_ELEMENT_ARRAY_BUFFER, 0 );CHECK_GL_ERROR;
278
291
279
292
280
- glGenTextures (1 , &g_texture);
281
- glBindTexture (GL_TEXTURE_2D, g_texture);
282
- glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
283
- glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
293
+ glGenTextures (1 , &g_texture);CHECK_GL_ERROR;
294
+ glBindTexture (GL_TEXTURE_2D, g_texture);CHECK_GL_ERROR;
295
+ glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);CHECK_GL_ERROR;
296
+ glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);CHECK_GL_ERROR;
284
297
285
- glTexImage2D (GL_TEXTURE_2D, 0 , GL_RGBA, g_window_width, g_window_height, 0 , GL_RGBA, GL_UNSIGNED_BYTE, nullptr );
298
+ glTexImage2D (GL_TEXTURE_2D, 0 , GL_RGBA, g_window_width, g_window_height, 0 , GL_RGBA, GL_UNSIGNED_BYTE, nullptr );CHECK_GL_ERROR;
286
299
287
- glBindTexture (GL_TEXTURE_2D, 0 );
300
+ glBindTexture (GL_TEXTURE_2D, 0 );CHECK_GL_ERROR;
288
301
}
289
302
290
303
void InitCl ()
@@ -1078,13 +1091,13 @@ int main(int argc, char * argv[])
1078
1091
}
1079
1092
}
1080
1093
// Setup window
1081
- // glfwSetErrorCallback(OnError);
1082
- // glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
1083
- // glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
1084
- // glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
1085
- // #if __APPLE__
1086
- // glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
1087
- // #endif
1094
+ glfwSetErrorCallback (OnError);
1095
+ glfwWindowHint (GLFW_CONTEXT_VERSION_MAJOR, 3 );
1096
+ glfwWindowHint (GLFW_CONTEXT_VERSION_MINOR, 3 );
1097
+ glfwWindowHint (GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
1098
+ #if __APPLE__
1099
+ glfwWindowHint (GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
1100
+ #endif
1088
1101
1089
1102
// GLUT Window Initialization:
1090
1103
GLFWwindow* window = glfwCreateWindow (g_window_width, g_window_height, " Baikal standalone demo" , nullptr , nullptr );
0 commit comments