25 #include "../../Kernel/OVR_Log.h"
28 namespace OVR {
namespace CAPI {
namespace GL {
33 #if !defined(OVR_OS_MAC)
35 #if defined(OVR_OS_WIN32)
37 PFNWGLGETPROCADDRESS wglGetProcAddress;
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;
58 PFNWGLGETSWAPINTERVALEXTPROC wglGetSwapIntervalEXT;
59 PFNWGLSWAPINTERVALEXTPROC wglSwapIntervalEXT;
61 #elif defined(OVR_OS_LINUX)
63 PFNGLXSWAPINTERVALEXTPROC glXSwapIntervalEXT;
108 #if defined(OVR_OS_WIN32)
112 return wglGetProcAddress(functionName);
119 return glXGetProcAddress((GLubyte*)functionName);
129 #if defined(OVR_OS_WIN32)
130 HINSTANCE hInst = LoadLibrary(L
"Opengl32.dll");
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");
153 wglGetProcAddress = (PFNWGLGETPROCADDRESS) GetProcAddress(hInst,
"wglGetProcAddress");
155 wglGetSwapIntervalEXT = (PFNWGLGETSWAPINTERVALEXTPROC)
GetFunction(
"wglGetSwapIntervalEXT");
156 wglSwapIntervalEXT = (PFNWGLSWAPINTERVALEXTPROC)
GetFunction(
"wglSwapIntervalEXT");
157 #elif defined(OVR_OS_LINUX)
158 glXSwapIntervalEXT = (PFNGLXSWAPINTERVALEXTPROC)
GetFunction(
"glXSwapIntervalEXT");
222 default:
Use = GL_ARRAY_BUFFER;
break;
228 int mode = GL_DYNAMIC_DRAW;
230 mode = GL_STATIC_DRAW;
239 int mode = GL_WRITE_ONLY;
304 for (
unsigned int i = 0; i <
UniformInfo.GetSize(); i++)
322 OVR_DEBUG_LOG((
"Warning: uniform %s not present in selected shader", name));
345 GLint uniformCount = 0;
349 for(GLuint i = 0; i < (GLuint)uniformCount; i++)
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;
383 if (!
strcmp(name,
"LightCount"))
392 for (
int i = 0; i < 8; i++)
460 glGenTextures(1, &
TexId);
466 glDeleteTextures(1, &
TexId);
472 glBindTexture(GL_TEXTURE_2D,
TexId);
477 glBindTexture(GL_TEXTURE_2D,
TexId);
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);
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);
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);
502 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
503 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
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);
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);
521 glDeleteTextures(1, &
TexId);
PFNGLDISABLEVERTEXATTRIBARRAYPROC glDisableVertexAttribArray
const Uniform * UniformRefl
virtual void SetShader(Shader *s)
PFNGLUNIFORM4FVPROC glUniform4fv
PFNGLUNIFORM3FVPROC glUniform3fv
PFNGLVERTEXATTRIBPOINTERPROC glVertexAttribPointer
virtual void SetSampleMode(int sm)
PFNGLUNIFORM1IPROC glUniform1i
unsigned char * UniformData
__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
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]
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
PFNGLDETACHSHADERPROC glDetachShader
void InitUniforms(const Uniform *refl, size_t reflSize)
PFNGLCREATESHADERPROC glCreateShader
PFNGLUNIFORMMATRIX4FVPROC glUniformMatrix4fv
Array< Uniform > UniformInfo
UPInt OVR_CDECL OVR_sprintf(char *dest, UPInt destsize, const char *format,...)
PFNGLDELETEBUFFERSPROC glDeleteBuffers
#define OVR_DEBUG_LOG(args)
virtual bool Data(int use, const void *buffer, size_t size)
PFNGLACTIVETEXTUREPROC glActiveTexture
PFNGLMAPBUFFERPROC glMapBuffer
PFNGLGETUNIFORMLOCATIONPROC glGetUniformLocation
PFNGLUNIFORMMATRIX3FVPROC glUniformMatrix3fv
PFNGLGETSHADERIVPROC glGetShaderiv