gzdoom/src/gl/system/gl_interface.h
2013-06-23 09:49:34 +02:00

249 lines
8.7 KiB
C

#ifndef R_RENDER
#define R_RENDER
#if defined(__APPLE__)
#define APIENTRY
#endif // __APPLE__
#ifndef PFNGLMULTITEXCOORD2FPROC
typedef void (APIENTRYP PFNGLMULTITEXCOORD2FPROC) (GLenum target, GLfloat s, GLfloat t);
#endif
#ifndef PFNGLMULTITEXCOORD2FVPROC
typedef void (APIENTRYP PFNGLMULTITEXCOORD2FVPROC) (GLenum target, const GLfloat *v);
#endif
enum RenderFlags
{
RFL_NPOT_TEXTURE=1,
RFL_NOSTENCIL=2,
RFL_OCCLUSION_QUERY=4,
// [BB] Added texture compression flags.
RFL_TEXTURE_COMPRESSION=8,
RFL_TEXTURE_COMPRESSION_S3TC=16,
RFL_VBO = 32,
RFL_MAP_BUFFER_RANGE = 64,
RFL_FRAMEBUFFER = 128,
RFL_TEXTUREBUFFER = 256,
RFL_NVIDIA = 512,
RFL_ATI = 1024,
RFL_GL_20 = 0x10000000,
RFL_GL_21 = 0x20000000,
RFL_GL_30 = 0x40000000,
};
enum TexMode
{
TMF_MASKBIT = 1,
TMF_OPAQUEBIT = 2,
TMF_INVERTBIT = 4,
TM_MODULATE = 0,
TM_MASK = TMF_MASKBIT,
TM_OPAQUE = TMF_OPAQUEBIT,
TM_INVERT = TMF_INVERTBIT,
//TM_INVERTMASK = TMF_MASKBIT | TMF_INVERTBIT
TM_INVERTOPAQUE = TMF_INVERTBIT | TMF_OPAQUEBIT,
};
struct RenderContext
{
unsigned int flags;
unsigned int shadermodel;
unsigned int maxuniforms;
int max_texturesize;
char * vendorstring;
int MaxLights() const
{
return maxuniforms>=2048? 128:64;
}
void (APIENTRY * LoadExtensions) ();
void (APIENTRY * SetTextureMode) (int type);
void (APIENTRY * PrintStartupLog) ();
BOOL (APIENTRY * SetVSync) (int on);
#if !defined (unix) && !defined (__APPLE__)
bool (APIENTRY * InitHardware) (HWND, bool allowsoftware, bool nostencil, int multisample);
void (APIENTRY * Shutdown) ();
#else
bool (APIENTRY * InitHardware) (bool allowsoftware, bool nostencil, int multisample);
#endif
void (APIENTRY * SwapBuffers) ();
bool (APIENTRY * SetFullscreen) (const char *devicename, int w, int h, int bits, int hz);
void (APIENTRY * Begin) (GLenum mode);
void (APIENTRY * End) (void);
void (APIENTRY * DrawArrays) (GLenum mode, GLint first, GLsizei count);
void (APIENTRY * TexCoord2f) (GLfloat s, GLfloat t);
void (APIENTRY * TexCoord2fv) (const GLfloat *v);
void (APIENTRY * Vertex2f) (GLfloat x, GLfloat y);
void (APIENTRY * Vertex2i) (GLint x, GLint y);
void (APIENTRY * Vertex3f) (GLfloat x, GLfloat y, GLfloat z);
void (APIENTRY * Vertex3d) (GLdouble x, GLdouble y, GLdouble z);
void (APIENTRY * Vertex3fv) (const GLfloat *v);
void (APIENTRY * Color4f) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
void (APIENTRY * Color4fv) (const GLfloat *v);
void (APIENTRY * Color3f) (GLfloat red, GLfloat green, GLfloat blue);
void (APIENTRY * Color3ub) (GLubyte red, GLubyte green, GLubyte blue);
void (APIENTRY * Color4ub) (GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha);
void (APIENTRY * BlendEquation) (GLenum);
void (APIENTRY * ColorMask) (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
void (APIENTRY * DepthFunc) (GLenum func);
void (APIENTRY * DepthMask) (GLboolean flag);
void (APIENTRY * DepthRange) (GLclampd zNear, GLclampd zFar);
void (APIENTRY * StencilFunc) (GLenum func, GLint ref, GLuint mask);
void (APIENTRY * StencilMask) (GLuint mask);
void (APIENTRY * StencilOp) (GLenum fail, GLenum zfail, GLenum zpass);
void (APIENTRY * MatrixMode) (GLenum mode);
void (APIENTRY * PushMatrix) (void);
void (APIENTRY * PopMatrix) (void);
void (APIENTRY * LoadIdentity) (void);
void (APIENTRY * MultMatrixd) (const GLdouble *m);
void (APIENTRY * Translatef) (GLfloat x, GLfloat y, GLfloat z);
void (APIENTRY * Ortho) (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar);
void (APIENTRY * Scalef) (GLfloat x, GLfloat y, GLfloat z);
void (APIENTRY * Rotatef) (GLfloat angle, GLfloat x, GLfloat y, GLfloat z);
void (APIENTRY * Viewport) (GLint x, GLint y, GLsizei width, GLsizei height);
void (APIENTRY * Scissor) (GLint x, GLint y, GLsizei width, GLsizei height);
void (APIENTRY * Clear) (GLbitfield mask);
void (APIENTRY * ClearColor) (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
void (APIENTRY * ClearDepth) (GLclampd depth);
void (APIENTRY * ShadeModel) (GLenum mode);
void (APIENTRY * Hint) (GLenum target, GLenum mode);
void (APIENTRY * DisableClientState) (GLenum array);
void (APIENTRY * EnableClientState) (GLenum array);
void (APIENTRY * Fogf) (GLenum pname, GLfloat param);
void (APIENTRY * Fogi) (GLenum pname, GLint param);
void (APIENTRY * Fogfv) (GLenum pname, const GLfloat *params);
void (APIENTRY * Enable) (GLenum cap);
GLboolean (APIENTRY * IsEnabled) (GLenum cap);
void (APIENTRY * Disable) (GLenum cap);
void (APIENTRY * TexGeni) (GLenum coord, GLenum pname, GLint param);
void (APIENTRY * DeleteTextures) (GLsizei n, const GLuint *textures);
void (APIENTRY * GenTextures) (GLsizei n, GLuint *textures);
void (APIENTRY * BindTexture) (GLenum target, GLuint texture);
void (APIENTRY * TexImage2D) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
void (APIENTRY * TexParameterf) (GLenum target, GLenum pname, GLfloat param);
void (APIENTRY * TexParameteri) (GLenum target, GLenum pname, GLint param);
void (APIENTRY * CopyTexSubImage2D) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
void (APIENTRY * ReadPixels) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels);
void (APIENTRY * PolygonOffset) (GLfloat factor, GLfloat units);
void (APIENTRY * ClipPlane) (GLenum which, const GLdouble *);
void (APIENTRY * Finish) (void);
void (APIENTRY * Flush) (void);
// ARB_SHADER_OBJECTS
PFNGLDELETESHADERPROC DeleteShader;
PFNGLDELETEPROGRAMPROC DeleteProgram;
PFNGLDETACHSHADERPROC DetachShader;
PFNGLCREATESHADERPROC CreateShader;
PFNGLSHADERSOURCEPROC ShaderSource;
PFNGLCOMPILESHADERPROC CompileShader;
PFNGLCREATEPROGRAMPROC CreateProgram;
PFNGLATTACHSHADERPROC AttachShader;
PFNGLLINKPROGRAMPROC LinkProgram;
PFNGLUSEPROGRAMPROC UseProgram;
PFNGLVALIDATEPROGRAMPROC ValidateProgram;
PFNGLVERTEXATTRIB1FPROC VertexAttrib1f;
PFNGLVERTEXATTRIB2FPROC VertexAttrib2f;
PFNGLVERTEXATTRIB4FPROC VertexAttrib4f;
PFNGLVERTEXATTRIB2FVPROC VertexAttrib2fv;
PFNGLVERTEXATTRIB3FVPROC VertexAttrib3fv;
PFNGLVERTEXATTRIB4FVPROC VertexAttrib4fv;
PFNGLVERTEXATTRIB4UBVPROC VertexAttrib4ubv;
PFNGLGETATTRIBLOCATIONPROC GetAttribLocation;
PFNGLBINDATTRIBLOCATIONPROC BindAttribLocation;
PFNGLUNIFORM1FPROC Uniform1f;
PFNGLUNIFORM2FPROC Uniform2f;
PFNGLUNIFORM3FPROC Uniform3f;
PFNGLUNIFORM4FPROC Uniform4f;
PFNGLUNIFORM1IPROC Uniform1i;
PFNGLUNIFORM2IPROC Uniform2i;
PFNGLUNIFORM3IPROC Uniform3i;
PFNGLUNIFORM4IPROC Uniform4i;
PFNGLUNIFORM1FVPROC Uniform1fv;
PFNGLUNIFORM2FVPROC Uniform2fv;
PFNGLUNIFORM3FVPROC Uniform3fv;
PFNGLUNIFORM4FVPROC Uniform4fv;
PFNGLUNIFORM1IVPROC Uniform1iv;
PFNGLUNIFORM2IVPROC Uniform2iv;
PFNGLUNIFORM3IVPROC Uniform3iv;
PFNGLUNIFORM4IVPROC Uniform4iv;
PFNGLUNIFORMMATRIX2FVPROC UniformMatrix2fv;
PFNGLUNIFORMMATRIX3FVPROC UniformMatrix3fv;
PFNGLUNIFORMMATRIX4FVPROC UniformMatrix4fv;
PFNGLGETSHADERINFOLOGPROC GetShaderInfoLog;
PFNGLGETPROGRAMINFOLOGPROC GetProgramInfoLog;
PFNGLGETUNIFORMLOCATIONPROC GetUniformLocation;
PFNGLGETACTIVEUNIFORMPROC GetActiveUniform;
PFNGLGETUNIFORMFVPROC GetUniformfv;
PFNGLGETUNIFORMIVPROC GetUniformiv;
PFNGLGETSHADERSOURCEPROC GetShaderSource;
PFNGLGETOBJECTPARAMETERIVARBPROC GetObjectParameteriv;
PFNGLGENQUERIESARBPROC GenQueries;
PFNGLDELETEQUERIESARBPROC DeleteQueries;
PFNGLBEGINQUERYARBPROC BeginQuery;
PFNGLENDQUERYARBPROC EndQuery;
PFNGLGETQUERYOBJECTUIVARBPROC GetQueryObjectuiv;
PFNGLACTIVETEXTUREPROC ActiveTexture;
PFNGLMULTITEXCOORD2FPROC MultiTexCoord2f;
PFNGLMULTITEXCOORD2FVPROC MultiTexCoord2fv;
PFNGLBINDBUFFERPROC BindBuffer;
PFNGLDELETEBUFFERSPROC DeleteBuffers;
PFNGLGENBUFFERSPROC GenBuffers;
PFNGLBUFFERDATAPROC BufferData;
PFNGLBUFFERSUBDATAPROC BufferSubData;
PFNGLMAPBUFFERPROC MapBuffer;
PFNGLUNMAPBUFFERPROC UnmapBuffer;
PFNGLENABLEVERTEXATTRIBARRAYPROC EnableVertexAttribArray;
PFNGLDISABLEVERTEXATTRIBARRAYPROC DisableVertexAttribArray;
PFNGLVERTEXATTRIBPOINTERPROC VertexAttribPointer;
PFNGLMAPBUFFERRANGEPROC MapBufferRange;
PFNGLFLUSHMAPPEDBUFFERRANGEPROC FlushMappedBufferRange;
PFNGLGENFRAMEBUFFERSPROC GenFramebuffers;
PFNGLDELETEFRAMEBUFFERSPROC DeleteFramebuffers;
PFNGLBINDFRAMEBUFFERPROC BindFramebuffer;
PFNGLFRAMEBUFFERTEXTURE2DPROC FramebufferTexture2D;
PFNGLGENRENDERBUFFERSPROC GenRenderbuffers;
PFNGLDELETERENDERBUFFERSPROC DeleteRenderbuffers;
PFNGLBINDRENDERBUFFERPROC BindRenderbuffer;
PFNGLRENDERBUFFERSTORAGEPROC RenderbufferStorage;
PFNGLFRAMEBUFFERRENDERBUFFERPROC FramebufferRenderbuffer;
PFNGLTEXBUFFERARBPROC TexBufferARB;
};
typedef void (APIENTRY * GetContextProc)(RenderContext & gl);
void APIENTRY GetContext(RenderContext & gl);
#endif