Bike-X  0.8
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
CAPI_GL_Util.cpp
Go to the documentation of this file.
1 /************************************************************************************
2 
3 Filename : Render_GL_Device.cpp
4 Content : RenderDevice implementation for OpenGL
5 Created : September 10, 2012
6 Authors : David Borel, Andrew Reisse
7 
8 Copyright : Copyright 2012 Oculus VR, Inc. All Rights reserved.
9 
10 Licensed under the Apache License, Version 2.0 (the "License");
11 you may not use this file except in compliance with the License.
12 You may obtain a copy of the License at
13 
14 http://www.apache.org/licenses/LICENSE-2.0
15 
16 Unless required by applicable law or agreed to in writing, software
17 distributed under the License is distributed on an "AS IS" BASIS,
18 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
19 See the License for the specific language governing permissions and
20 limitations under the License.
21 
22 ************************************************************************************/
23 
24 #include "CAPI_GL_Util.h"
25 #include "../../Kernel/OVR_Log.h"
26 #include <string.h>
27 
28 namespace OVR { namespace CAPI { namespace GL {
29 
30 
31 
32 // GL Hooks for non-Mac.
33 #if !defined(OVR_OS_MAC)
34 
35 #if defined(OVR_OS_WIN32)
36 
37 PFNWGLGETPROCADDRESS wglGetProcAddress;
38 
39 PFNGLENABLEPROC glEnable;
40 PFNGLDISABLEPROC glDisable;
41 PFNGLGETFLOATVPROC glGetFloatv;
42 PFNGLGETINTEGERVPROC glGetIntegerv;
43 PFNGLGETSTRINGPROC glGetString;
44 PFNGLCOLORMASKPROC glColorMask;
45 PFNGLCLEARPROC glClear;
46 PFNGLCLEARCOLORPROC glClearColor;
47 PFNGLCLEARDEPTHPROC glClearDepth;
48 PFNGLVIEWPORTPROC glViewport;
49 PFNGLDRAWELEMENTSPROC glDrawElements;
50 PFNGLTEXPARAMETERIPROC glTexParameteri;
51 PFNGLFLUSHPROC glFlush;
52 PFNGLFINISHPROC glFinish;
53 PFNGLDRAWARRAYSPROC glDrawArrays;
54 PFNGLGENTEXTURESPROC glGenTextures;
55 PFNGLDELETETEXTURESPROC glDeleteTextures;
56 PFNGLBINDTEXTUREPROC glBindTexture;
57 
58 PFNWGLGETSWAPINTERVALEXTPROC wglGetSwapIntervalEXT;
59 PFNWGLSWAPINTERVALEXTPROC wglSwapIntervalEXT;
60 
61 #elif defined(OVR_OS_LINUX)
62 
63 PFNGLXSWAPINTERVALEXTPROC glXSwapIntervalEXT;
64 
65 #endif
66 
67 PFNGLDELETESHADERPROC glDeleteShader;
68 PFNGLBINDFRAMEBUFFERPROC glBindFramebuffer;
69 PFNGLACTIVETEXTUREPROC glActiveTexture;
70 PFNGLDISABLEVERTEXATTRIBARRAYPROC glDisableVertexAttribArray;
71 PFNGLVERTEXATTRIBPOINTERPROC glVertexAttribPointer;
72 PFNGLENABLEVERTEXATTRIBARRAYPROC glEnableVertexAttribArray;
73 PFNGLBINDBUFFERPROC glBindBuffer;
74 PFNGLUNIFORMMATRIX3FVPROC glUniformMatrix3fv;
75 PFNGLUNIFORMMATRIX4FVPROC glUniformMatrix4fv;
76 PFNGLDELETEBUFFERSPROC glDeleteBuffers;
77 PFNGLBUFFERDATAPROC glBufferData;
78 PFNGLGENBUFFERSPROC glGenBuffers;
79 PFNGLMAPBUFFERPROC glMapBuffer;
80 PFNGLUNMAPBUFFERPROC glUnmapBuffer;
81 PFNGLGETSHADERINFOLOGPROC glGetShaderInfoLog;
82 PFNGLGETSHADERIVPROC glGetShaderiv;
83 PFNGLCOMPILESHADERPROC glCompileShader;
84 PFNGLSHADERSOURCEPROC glShaderSource;
85 PFNGLCREATESHADERPROC glCreateShader;
86 PFNGLCREATEPROGRAMPROC glCreateProgram;
87 PFNGLATTACHSHADERPROC glAttachShader;
88 PFNGLDETACHSHADERPROC glDetachShader;
89 PFNGLDELETEPROGRAMPROC glDeleteProgram;
90 PFNGLUNIFORM1IPROC glUniform1i;
91 PFNGLGETUNIFORMLOCATIONPROC glGetUniformLocation;
92 PFNGLGETACTIVEUNIFORMPROC glGetActiveUniform;
93 PFNGLUSEPROGRAMPROC glUseProgram;
94 PFNGLGETPROGRAMINFOLOGPROC glGetProgramInfoLog;
95 PFNGLGETPROGRAMIVPROC glGetProgramiv;
96 PFNGLLINKPROGRAMPROC glLinkProgram;
97 PFNGLBINDATTRIBLOCATIONPROC glBindAttribLocation;
98 PFNGLGETATTRIBLOCATIONPROC glGetAttribLocation;
99 PFNGLUNIFORM4FVPROC glUniform4fv;
100 PFNGLUNIFORM3FVPROC glUniform3fv;
101 PFNGLUNIFORM2FVPROC glUniform2fv;
102 PFNGLUNIFORM1FVPROC glUniform1fv;
103 PFNGLGENVERTEXARRAYSPROC glGenVertexArrays;
104 PFNGLDELETEVERTEXARRAYSPROC glDeleteVertexArrays;
105 PFNGLBINDVERTEXARRAYPROC glBindVertexArray;
106 
107 
108 #if defined(OVR_OS_WIN32)
109 
110 void* GetFunction(const char* functionName)
111 {
112  return wglGetProcAddress(functionName);
113 }
114 
115 #else
116 
117 void (*GetFunction(const char *functionName))( void )
118 {
119  return glXGetProcAddress((GLubyte*)functionName);
120 }
121 
122 #endif
123 
125 {
126  if (glGenVertexArrays)
127  return;
128 
129 #if defined(OVR_OS_WIN32)
130  HINSTANCE hInst = LoadLibrary(L"Opengl32.dll");
131  if (!hInst)
132  return;
133 
134  glGetFloatv = (PFNGLGETFLOATVPROC) GetProcAddress(hInst, "glGetFloatv");
135  glGetIntegerv = (PFNGLGETINTEGERVPROC) GetProcAddress(hInst, "glGetIntegerv");
136  glGetString = (PFNGLGETSTRINGPROC) GetProcAddress(hInst, "glGetString");
137  glEnable = (PFNGLENABLEPROC) GetProcAddress(hInst, "glEnable");
138  glDisable = (PFNGLDISABLEPROC) GetProcAddress(hInst, "glDisable");
139  glColorMask = (PFNGLCOLORMASKPROC) GetProcAddress(hInst, "glColorMask");
140  glClear = (PFNGLCLEARPROC) GetProcAddress(hInst, "glClear" );
141  glClearColor = (PFNGLCLEARCOLORPROC) GetProcAddress(hInst, "glClearColor");
142  glClearDepth = (PFNGLCLEARDEPTHPROC) GetProcAddress(hInst, "glClearDepth");
143  glViewport = (PFNGLVIEWPORTPROC) GetProcAddress(hInst, "glViewport");
144  glFlush = (PFNGLFLUSHPROC) GetProcAddress(hInst, "glFlush");
145  glFinish = (PFNGLFINISHPROC) GetProcAddress(hInst, "glFinish");
146  glDrawArrays = (PFNGLDRAWARRAYSPROC) GetProcAddress(hInst, "glDrawArrays");
147  glDrawElements = (PFNGLDRAWELEMENTSPROC) GetProcAddress(hInst, "glDrawElements");
148  glGenTextures = (PFNGLGENTEXTURESPROC) GetProcAddress(hInst,"glGenTextures");
149  glDeleteTextures = (PFNGLDELETETEXTURESPROC) GetProcAddress(hInst,"glDeleteTextures");
150  glBindTexture = (PFNGLBINDTEXTUREPROC) GetProcAddress(hInst,"glBindTexture");
151  glTexParameteri = (PFNGLTEXPARAMETERIPROC) GetProcAddress(hInst, "glTexParameteri");
152 
153  wglGetProcAddress = (PFNWGLGETPROCADDRESS) GetProcAddress(hInst, "wglGetProcAddress");
154 
155  wglGetSwapIntervalEXT = (PFNWGLGETSWAPINTERVALEXTPROC) GetFunction("wglGetSwapIntervalEXT");
156  wglSwapIntervalEXT = (PFNWGLSWAPINTERVALEXTPROC) GetFunction("wglSwapIntervalEXT");
157 #elif defined(OVR_OS_LINUX)
158  glXSwapIntervalEXT = (PFNGLXSWAPINTERVALEXTPROC) GetFunction("glXSwapIntervalEXT");
159 #endif
160 
161  glBindFramebuffer = (PFNGLBINDFRAMEBUFFERPROC) GetFunction("glBindFramebufferEXT");
162  glGenVertexArrays = (PFNGLGENVERTEXARRAYSPROC) GetFunction("glGenVertexArrays");
163  glDeleteVertexArrays = (PFNGLDELETEVERTEXARRAYSPROC) GetFunction("glDeleteVertexArrays");
164  glBindVertexArray = (PFNGLBINDVERTEXARRAYPROC) GetFunction("glBindVertexArray");
165  glGenBuffers = (PFNGLGENBUFFERSPROC) GetFunction("glGenBuffers");
166  glDeleteBuffers = (PFNGLDELETEBUFFERSPROC) GetFunction("glDeleteBuffers");
167  glBindBuffer = (PFNGLBINDBUFFERPROC) GetFunction("glBindBuffer");
168  glBufferData = (PFNGLBUFFERDATAPROC) GetFunction("glBufferData");
169  glMapBuffer = (PFNGLMAPBUFFERPROC) GetFunction("glMapBuffer");
170  glUnmapBuffer = (PFNGLUNMAPBUFFERPROC) GetFunction("glUnmapBuffer");
171  glDisableVertexAttribArray = (PFNGLDISABLEVERTEXATTRIBARRAYPROC) GetFunction("glDisableVertexAttribArray");
172  glVertexAttribPointer = (PFNGLVERTEXATTRIBPOINTERPROC) GetFunction("glVertexAttribPointer");
173  glEnableVertexAttribArray = (PFNGLENABLEVERTEXATTRIBARRAYPROC) GetFunction("glEnableVertexAttribArray");
174  glActiveTexture = (PFNGLACTIVETEXTUREPROC) GetFunction("glActiveTexture");
175  glUniformMatrix3fv = (PFNGLUNIFORMMATRIX3FVPROC) GetFunction("glUniformMatrix3fv");
176  glUniformMatrix4fv = (PFNGLUNIFORMMATRIX4FVPROC) GetFunction("glUniformMatrix4fv");
177  glUniform1i = (PFNGLUNIFORM1IPROC) GetFunction("glUniform1i");
178  glUniform1fv = (PFNGLUNIFORM1FVPROC) GetFunction("glUniform1fv");
179  glUniform2fv = (PFNGLUNIFORM2FVPROC) GetFunction("glUniform2fv");
180  glUniform3fv = (PFNGLUNIFORM3FVPROC) GetFunction("glUniform3fv");
181  glUniform2fv = (PFNGLUNIFORM2FVPROC) GetFunction("glUniform2fv");
182  glUniform4fv = (PFNGLUNIFORM4FVPROC) GetFunction("glUniform4fv");
183  glGetUniformLocation = (PFNGLGETUNIFORMLOCATIONPROC) GetFunction("glGetUniformLocation");
184  glGetActiveUniform = (PFNGLGETACTIVEUNIFORMPROC) GetFunction("glGetActiveUniform");
185  glGetShaderInfoLog = (PFNGLGETSHADERINFOLOGPROC) GetFunction("glGetShaderInfoLog");
186  glGetShaderiv = (PFNGLGETSHADERIVPROC) GetFunction("glGetShaderiv");
187  glCompileShader = (PFNGLCOMPILESHADERPROC) GetFunction("glCompileShader");
188  glShaderSource = (PFNGLSHADERSOURCEPROC) GetFunction("glShaderSource");
189  glCreateShader = (PFNGLCREATESHADERPROC) GetFunction("glCreateShader");
190  glDeleteShader = (PFNGLDELETESHADERPROC) GetFunction("glDeleteShader");
191  glCreateProgram = (PFNGLCREATEPROGRAMPROC) GetFunction("glCreateProgram");
192  glDeleteProgram = (PFNGLDELETEPROGRAMPROC) GetFunction("glDeleteProgram");
193  glUseProgram = (PFNGLUSEPROGRAMPROC) GetFunction("glUseProgram");
194  glGetProgramInfoLog = (PFNGLGETPROGRAMINFOLOGPROC) GetFunction("glGetProgramInfoLog");
195  glGetProgramiv = (PFNGLGETPROGRAMIVPROC) GetFunction("glGetProgramiv");
196  glLinkProgram = (PFNGLLINKPROGRAMPROC) GetFunction("glLinkProgram");
197  glAttachShader = (PFNGLATTACHSHADERPROC) GetFunction("glAttachShader");
198  glDetachShader = (PFNGLDETACHSHADERPROC) GetFunction("glDetachShader");
199  glBindAttribLocation = (PFNGLBINDATTRIBLOCATIONPROC) GetFunction("glBindAttribLocation");
200  glGetAttribLocation = (PFNGLGETATTRIBLOCATIONPROC) GetFunction("glGetAttribLocation");
201 }
202 
203 #endif
204 
205 Buffer::Buffer(RenderParams* rp) : pParams(rp), Size(0), Use(0), GLBuffer(0)
206 {
207 }
208 
210 {
211  if (GLBuffer)
213 }
214 
215 bool Buffer::Data(int use, const void* buffer, size_t size)
216 {
217  Size = size;
218 
219  switch (use & Buffer_TypeMask)
220  {
221  case Buffer_Index: Use = GL_ELEMENT_ARRAY_BUFFER; break;
222  default: Use = GL_ARRAY_BUFFER; break;
223  }
224 
225  if (!GLBuffer)
226  glGenBuffers(1, &GLBuffer);
227 
228  int mode = GL_DYNAMIC_DRAW;
229  if (use & Buffer_ReadOnly)
230  mode = GL_STATIC_DRAW;
231 
233  glBufferData(Use, size, buffer, mode);
234  return 1;
235 }
236 
237 void* Buffer::Map(size_t, size_t, int)
238 {
239  int mode = GL_WRITE_ONLY;
240  //if (flags & Map_Unsynchronized)
241  // mode |= GL_MAP_UNSYNCHRONIZED;
242 
244  void* v = glMapBuffer(Use, mode);
245  return v;
246 }
247 
248 bool Buffer::Unmap(void*)
249 {
251  int r = glUnmapBuffer(Use);
252  return r != 0;
253 }
254 
256 {
257  Prog = glCreateProgram();
258 }
260 {
262 }
263 
265 {
266  switch (s->Stage)
267  {
268  case Shader_Vertex: {
270  return gls->GLShader;
271  } break;
272  case Shader_Fragment: {
274  return gls->GLShader;
275  } break;
276  default: break;
277  }
278 
279  return -1;
280 }
281 
283 {
284  Shaders[s->Stage] = s;
285  GLint GLShader = GetGLShader(s);
286  glAttachShader(Prog, GLShader);
288  Link();
289 }
290 
291 void ShaderSet::UnsetShader(int stage)
292 {
293  if (Shaders[stage] == NULL)
294  return;
295 
296  GLint GLShader = GetGLShader(Shaders[stage]);
297  glDetachShader(Prog, GLShader);
298 
299  Shaders[stage] = NULL;
300 }
301 
302 bool ShaderSet::SetUniform(const char* name, int n, const float* v)
303 {
304  for (unsigned int i = 0; i < UniformInfo.GetSize(); i++)
305  if (!strcmp(UniformInfo[i].Name.ToCStr(), name))
306  {
307  OVR_ASSERT(UniformInfo[i].Location >= 0);
309  switch (UniformInfo[i].Type)
310  {
311  case 1: glUniform1fv(UniformInfo[i].Location, n, v); break;
312  case 2: glUniform2fv(UniformInfo[i].Location, n/2, v); break;
313  case 3: glUniform3fv(UniformInfo[i].Location, n/3, v); break;
314  case 4: glUniform4fv(UniformInfo[i].Location, n/4, v); break;
315  case 12: glUniformMatrix3fv(UniformInfo[i].Location, 1, 1, v); break;
316  case 16: glUniformMatrix4fv(UniformInfo[i].Location, 1, 1, v); break;
317  default: OVR_ASSERT(0);
318  }
319  return 1;
320  }
321 
322  OVR_DEBUG_LOG(("Warning: uniform %s not present in selected shader", name));
323  return 0;
324 }
325 
327 {
329  GLint r;
330  glGetProgramiv(Prog, GL_LINK_STATUS, &r);
331  if (!r)
332  {
333  GLchar msg[1024];
334  glGetProgramInfoLog(Prog, sizeof(msg), 0, msg);
335  OVR_DEBUG_LOG(("Linking shaders failed: %s\n", msg));
336  if (!r)
337  return 0;
338  }
340 
341  UniformInfo.Clear();
342  LightingVer = 0;
343  UsesLighting = 0;
344 
345  GLint uniformCount = 0;
346  glGetProgramiv(Prog, GL_ACTIVE_UNIFORMS, &uniformCount);
347  OVR_ASSERT(uniformCount >= 0);
348 
349  for(GLuint i = 0; i < (GLuint)uniformCount; i++)
350  {
351  GLsizei namelen;
352  GLint size = 0;
353  GLenum type;
354  GLchar name[32];
355  glGetActiveUniform(Prog, i, sizeof(name), &namelen, &size, &type, name);
356 
357  if (size)
358  {
359  int l = glGetUniformLocation(Prog, name);
360  char *np = name;
361  while (*np)
362  {
363  if (*np == '[')
364  *np = 0;
365  np++;
366  }
367  Uniform u;
368  u.Name = name;
369  u.Location = l;
370  u.Size = size;
371  switch (type)
372  {
373  case GL_FLOAT: u.Type = 1; break;
374  case GL_FLOAT_VEC2: u.Type = 2; break;
375  case GL_FLOAT_VEC3: u.Type = 3; break;
376  case GL_FLOAT_VEC4: u.Type = 4; break;
377  case GL_FLOAT_MAT3: u.Type = 12; break;
378  case GL_FLOAT_MAT4: u.Type = 16; break;
379  default:
380  continue;
381  }
382  UniformInfo.PushBack(u);
383  if (!strcmp(name, "LightCount"))
384  UsesLighting = 1;
385  }
386  else
387  break;
388  }
389 
390  ProjLoc = glGetUniformLocation(Prog, "Proj");
391  ViewLoc = glGetUniformLocation(Prog, "View");
392  for (int i = 0; i < 8; i++)
393  {
394  char texv[32];
395  OVR_sprintf(texv, 10, "Texture%d", i);
396  TexLoc[i] = glGetUniformLocation(Prog, texv);
397  if (TexLoc[i] < 0)
398  break;
399 
400  glUniform1i(TexLoc[i], i);
401  }
402  if (UsesLighting)
403  OVR_ASSERT(ProjLoc >= 0 && ViewLoc >= 0);
404  return 1;
405 }
406 
407 bool ShaderBase::SetUniform(const char* name, int n, const float* v)
408 {
409  for(unsigned i = 0; i < UniformReflSize; i++)
410  {
411  if (!strcmp(UniformRefl[i].Name, name))
412  {
413  memcpy(UniformData + UniformRefl[i].Offset, v, n * sizeof(float));
414  return 1;
415  }
416  }
417  return 0;
418 }
419 
420 bool ShaderBase::SetUniformBool(const char* name, int n, const bool* v)
421 {
422  OVR_UNUSED(n);
423  for(unsigned i = 0; i < UniformReflSize; i++)
424  {
425  if (!strcmp(UniformRefl[i].Name, name))
426  {
427  memcpy(UniformData + UniformRefl[i].Offset, v, UniformRefl[i].Size);
428  return 1;
429  }
430  }
431  return 0;
432 }
433 
434 void ShaderBase::InitUniforms(const Uniform* refl, size_t reflSize)
435 {
436  if(!refl)
437  {
438  UniformRefl = NULL;
439  UniformReflSize = 0;
440 
441  UniformsSize = 0;
442  if (UniformData)
443  {
445  UniformData = 0;
446  }
447  return; // no reflection data
448  }
449 
450  UniformRefl = refl;
451  UniformReflSize = reflSize;
452 
454  UniformData = (unsigned char*)OVR_ALLOC(UniformsSize);
455 }
456 
457 Texture::Texture(RenderParams* rp, int w, int h) : IsUserAllocated(true), pParams(rp), TexId(0), Width(w), Height(h)
458 {
459  if (w && h)
460  glGenTextures(1, &TexId);
461 }
462 
464 {
465  if (TexId && !IsUserAllocated)
466  glDeleteTextures(1, &TexId);
467 }
468 
469 void Texture::Set(int slot, ShaderStage) const
470 {
471  glActiveTexture(GL_TEXTURE0 + slot);
472  glBindTexture(GL_TEXTURE_2D, TexId);
473 }
474 
476 {
477  glBindTexture(GL_TEXTURE_2D, TexId);
478  switch (sm & Sample_FilterMask)
479  {
480  case Sample_Linear:
481  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
482  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
483  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, 1);
484  break;
485 
486  case Sample_Anisotropic:
487  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
488  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
489  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, 8);
490  break;
491 
492  case Sample_Nearest:
493  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
494  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
495  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, 1);
496  break;
497  }
498 
499  switch (sm & Sample_AddressMask)
500  {
501  case Sample_Repeat:
502  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
503  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
504  break;
505 
506  case Sample_Clamp:
507  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
508  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
509  break;
510 
511  case Sample_ClampBorder:
512  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER);
513  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER);
514  break;
515  }
516 }
517 
518 void Texture::UpdatePlaceholderTexture(GLuint texId, const Sizei& textureSize)
519 {
520  if (!IsUserAllocated && TexId && texId != TexId)
521  glDeleteTextures(1, &TexId);
522 
523  TexId = texId;
524  Width = textureSize.w;
525  Height = textureSize.h;
526 
527  IsUserAllocated = true;
528 }
529 
530 }}}
PFNGLDISABLEVERTEXATTRIBARRAYPROC glDisableVertexAttribArray
const Uniform * UniformRefl
Definition: CAPI_GL_Util.h:462
virtual void SetShader(Shader *s)
PFNGLUNIFORM4FVPROC glUniform4fv
PFNGLUNIFORM3FVPROC glUniform3fv
PFNGLVERTEXATTRIBPOINTERPROC glVertexAttribPointer
virtual void SetSampleMode(int sm)
PFNGLUNIFORM1IPROC glUniform1i
unsigned char * UniformData
Definition: CAPI_GL_Util.h:446
#define NULL
__BEGIN_NAMESPACE_STD void * memcpy(void *__restrict __dest, const void *__restrict __src, size_t __n) __THROW __nonnull((1
void(*)(void) GetFunction(const char *functionName)
PFNGLBUFFERDATAPROC glBufferData
PFNGLCREATEPROGRAMPROC glCreateProgram
PFNGLDELETEPROGRAMPROC glDeleteProgram
PFNGLDELETEVERTEXARRAYSPROC glDeleteVertexArrays
Texture(RenderParams *rp, int w, int h)
PFNGLDELETESHADERPROC glDeleteShader
PFNGLGETPROGRAMIVPROC glGetProgramiv
#define OVR_UNUSED(a)
void UpdatePlaceholderTexture(GLuint texId, const Sizei &textureSize)
PFNGLUNMAPBUFFERPROC glUnmapBuffer
GLint GetGLShader(Shader *s)
PFNGLSHADERSOURCEPROC glShaderSource
PFNGLUNIFORM1FVPROC glUniform1fv
virtual void Set(int slot, ShaderStage stage=Shader_Fragment) const
PFNGLBINDFRAMEBUFFERPROC glBindFramebuffer
PFNGLGETPROGRAMINFOLOGPROC glGetProgramInfoLog
virtual bool Unmap(void *m)
bool SetUniform(const char *name, int n, const float *v)
__END_NAMESPACE_STD __BEGIN_NAMESPACE_STD char char char char int strcmp(const char *__s1, const char *__s2) __THROW __attribute_pure__ __nonnull((1
virtual void * Map(size_t start, size_t size, int flags=0)
PFNGLCOMPILESHADERPROC glCompileShader
PFNGLGETACTIVEUNIFORMPROC glGetActiveUniform
PFNGLLINKPROGRAMPROC glLinkProgram
PFNGLGENVERTEXARRAYSPROC glGenVertexArrays
virtual void UnsetShader(int stage)
PFNGLGETATTRIBLOCATIONPROC glGetAttribLocation
Ptr< Shader > Shaders[Shader_Count]
Definition: CAPI_GL_Util.h:310
#define OVR_ASSERT(p)
PFNGLUSEPROGRAMPROC glUseProgram
PFNGLENABLEVERTEXATTRIBARRAYPROC glEnableVertexAttribArray
PFNGLGETSHADERINFOLOGPROC glGetShaderInfoLog
PFNGLBINDVERTEXARRAYPROC glBindVertexArray
PFNGLUNIFORM2FVPROC glUniform2fv
PFNGLBINDATTRIBLOCATIONPROC glBindAttribLocation
PFNGLATTACHSHADERPROC glAttachShader
bool SetUniformBool(const char *name, int n, const bool *v)
virtual bool SetUniform(const char *name, int n, const float *v)
PFNGLGENBUFFERSPROC glGenBuffers
PFNGLBINDBUFFERPROC glBindBuffer
Buffer(RenderParams *r)
PFNGLDETACHSHADERPROC glDetachShader
void InitUniforms(const Uniform *refl, size_t reflSize)
PFNGLCREATESHADERPROC glCreateShader
PFNGLUNIFORMMATRIX4FVPROC glUniformMatrix4fv
Array< Uniform > UniformInfo
Definition: CAPI_GL_Util.h:318
UPInt OVR_CDECL OVR_sprintf(char *dest, UPInt destsize, const char *format,...)
Definition: OVR_Std.h:280
PFNGLDELETEBUFFERSPROC glDeleteBuffers
#define OVR_ALLOC(s)
#define OVR_DEBUG_LOG(args)
Definition: OVR_Log.h:196
virtual bool Data(int use, const void *buffer, size_t size)
PFNGLACTIVETEXTUREPROC glActiveTexture
PFNGLMAPBUFFERPROC glMapBuffer
#define OVR_FREE(p)
PFNGLGETUNIFORMLOCATIONPROC glGetUniformLocation
PFNGLUNIFORMMATRIX3FVPROC glUniformMatrix3fv
void InitGLExtensions()
PFNGLGETSHADERIVPROC glGetShaderiv