summaryrefslogtreecommitdiffstats
path: root/libvo/gl_common.c
diff options
context:
space:
mode:
authorreimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2>2005-07-26 10:16:18 +0000
committerreimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2>2005-07-26 10:16:18 +0000
commitc30b5e70b7b270cdb4d994dcb4c0a357b56f1db4 (patch)
tree04fddce3c5c002aed533b6c773b633589fdf720d /libvo/gl_common.c
parent386ab83ceb20650ce4e1d31c6f58f6c1d4e1dbeb (diff)
downloadmpv-c30b5e70b7b270cdb4d994dcb4c0a357b56f1db4.tar.bz2
mpv-c30b5e70b7b270cdb4d994dcb4c0a357b56f1db4.tar.xz
support for rectangular and streaming textures.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@16100 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libvo/gl_common.c')
-rw-r--r--libvo/gl_common.c86
1 files changed, 86 insertions, 0 deletions
diff --git a/libvo/gl_common.c b/libvo/gl_common.c
index 60577ebb84..05c6974967 100644
--- a/libvo/gl_common.c
+++ b/libvo/gl_common.c
@@ -1,5 +1,24 @@
#include "gl_common.h"
+void (APIENTRY *BindBuffer)(GLenum, GLuint);
+GLvoid* (APIENTRY *MapBuffer)(GLenum, GLenum);
+GLboolean (APIENTRY *UnmapBuffer)(GLenum);
+void (APIENTRY *BufferData)(GLenum, GLsizeiptr, const GLvoid *, GLenum);
+void (APIENTRY *CombinerParameterfv)(GLenum, const GLfloat *);
+void (APIENTRY *CombinerParameteri)(GLenum, GLint);
+void (APIENTRY *CombinerInput)(GLenum, GLenum, GLenum, GLenum, GLenum,
+ GLenum);
+void (APIENTRY *CombinerOutput)(GLenum, GLenum, GLenum, GLenum, GLenum,
+ GLenum, GLenum, GLboolean, GLboolean,
+ GLboolean);
+void (APIENTRY *ActiveTexture)(GLenum);
+void (APIENTRY *BindTexture)(GLenum, GLuint);
+void (APIENTRY *MultiTexCoord2f)(GLenum, GLfloat, GLfloat);
+void (APIENTRY *BindProgram)(GLenum, GLuint);
+void (APIENTRY *ProgramString)(GLenum, GLenum, GLsizei, const GLvoid *);
+void (APIENTRY *ProgramEnvParameter4f)(GLenum, GLuint, GLfloat, GLfloat,
+ GLfloat, GLfloat);
+
/**
* \brief adjusts the GL_UNPACK_ALGNMENT to fit the stride.
* \param stride number of bytes per line for which alignment should fit.
@@ -178,6 +197,65 @@ int glFindFormat(uint32_t fmt, uint32_t *bpp, GLenum *gl_texfmt,
return 1;
}
+static void *setNull(const GLubyte *s) {
+ return NULL;
+}
+
+static void *(*getProcAddress)(const GLubyte *procName);
+
+static void getFunctions() {
+ if (!getProcAddress)
+ getProcAddress = setNull;
+ BindBuffer = getProcAddress("glBindBuffer");
+ if (!BindBuffer)
+ BindBuffer = getProcAddress("glBindBufferARB");
+ MapBuffer = getProcAddress("glMapBuffer");
+ if (!MapBuffer)
+ MapBuffer = getProcAddress("glMapBufferARB");
+ UnmapBuffer = getProcAddress("glUnmapBuffer");
+ if (!UnmapBuffer)
+ UnmapBuffer = getProcAddress("glUnmapBufferARB");
+ BufferData = getProcAddress("glBufferData");
+ if (!BufferData)
+ BufferData = getProcAddress("glBufferDataARB");
+ CombinerParameterfv = getProcAddress("glCombinerParameterfv");
+ if (!CombinerParameterfv)
+ CombinerParameterfv = getProcAddress("glCombinerParameterfvNV");
+ CombinerParameteri = getProcAddress("glCombinerParameteri");
+ if (!CombinerParameteri)
+ CombinerParameteri = getProcAddress("glCombinerParameteriNV");
+ CombinerInput = getProcAddress("glCombinerInput");
+ if (!CombinerInput)
+ CombinerInput = getProcAddress("glCombinerInputNV");
+ CombinerOutput = getProcAddress("glCombinerOutput");
+ if (!CombinerOutput)
+ CombinerOutput = getProcAddress("glCombinerOutputNV");
+ ActiveTexture = getProcAddress("glActiveTexture");
+ if (!ActiveTexture)
+ ActiveTexture = getProcAddress("glActiveTextureARB");
+ BindTexture = getProcAddress("glBindTexture");
+ if (!BindTexture)
+ BindTexture = getProcAddress("glBindTextureARB");
+ MultiTexCoord2f = getProcAddress("glMultiTexCoord2f");
+ if (!MultiTexCoord2f)
+ MultiTexCoord2f = getProcAddress("glMultiTexCoord2fARB");
+ BindProgram = getProcAddress("glBindProgram");
+ if (!BindProgram)
+ BindProgram = getProcAddress("glBindProgramARB");
+ if (!BindProgram)
+ BindProgram = getProcAddress("glBindProgramNV");
+ ProgramString = getProcAddress("glProgramString");
+ if (!ProgramString)
+ ProgramString = getProcAddress("glProgramStringARB");
+ if (!ProgramString)
+ ProgramString = getProcAddress("glProgramStringNV");
+ ProgramEnvParameter4f = getProcAddress("glProgramEnvParameter4f");
+ if (!ProgramEnvParameter4f)
+ ProgramEnvParameter4f = getProcAddress("glProgramEnvParameter4fARB");
+ if (!ProgramEnvParameter4f)
+ ProgramEnvParameter4f = getProcAddress("glProgramEnvParameter4fNV");
+}
+
#ifdef GL_WIN32
int setGlWindow(int *vinfo, HGLRC *context, HWND win)
{
@@ -226,6 +304,8 @@ int setGlWindow(int *vinfo, HGLRC *context, HWND win)
wglDeleteContext(*context);
*context = new_context;
*vinfo = new_vinfo;
+ getProcAddress = wglGetProcAddress;
+ getFunctions();
// and inform that reinit is neccessary
return SET_WINDOW_REINIT;
@@ -319,6 +399,12 @@ int setGlWindow(XVisualInfo **vinfo, GLXContext *context, Window win)
if (*vinfo)
XFree(*vinfo);
*vinfo = new_vinfo;
+#ifdef GLX_ARB_get_proc_address
+ getProcAddress = (void *)glXGetProcAddressARB;
+#else
+ getProcAddress = NULL;
+#endif
+ getFunctions();
// and inform that reinit is neccessary
return SET_WINDOW_REINIT;