VBoxGLSupportInfo.h revision 44466d3efa47355c96b36674966f89397db5e540
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsync * VBox frontends: Qt GUI ("VirtualBox"):
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsync * OpenGL support info used for 2D support detection
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsync * Copyright (C) 2009 Sun Microsystems, Inc.
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsync * available from http://www.virtualbox.org. This file is free software;
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsync * you can redistribute it and/or modify it under the terms of the GNU
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsync * General Public License (GPL) as published by the Free Software
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsync * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsync * Clara, CA 95054 USA or visit http://www.sun.com if you need
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsync * additional information or have any questions.
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsync# define VBOXQGLLOGREL(_m) do { RTPrintf _m ; LogRel( _m ); } while(0)
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsync//do{VBOXQGLLOG(("==>[%s]:", __FUNCTION__)); VBOXQGLLOG(_m);}while(0)
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsync//do{VBOXQGLLOG(("<==[%s]:", __FUNCTION__)); VBOXQGLLOG(_m);}while(0)
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsync if(err != GL_NO_ERROR) VBOXQGLLOG(("gl error ocured (0x%x)\n", err)); \
14ea49401f3c8c61422aefbda43809e275f60c6cvboxsync do {}while(0)
#ifdef DEBUG
const char* mMsg;
#define VBOXQG_CHECKCONTEXT() \
if(str) \
#define VBOXQG_CHECKCONTEXT() do{}while(0)
VBOXQGLLOG((_p " x(%d), y(%d), w(%d), h(%d)" _s, (_pr)->x(), (_pr)->y(), (_pr)->width(), (_pr)->height()));\
typedef char GLchar;
#ifndef GL_COMPILE_STATUS
#ifndef GL_LINK_STATUS
#ifndef GL_FRAGMENT_SHADER
#ifndef GL_VERTEX_SHADER
#ifndef GL_TEXTURE0
#ifndef GL_TEXTURE1
#ifndef GL_MAX_TEXTURE_COORDS
#ifndef GL_MAX_TEXTURE_IMAGE_UNITS
#ifndef APIENTRY
# define APIENTRY
typedef GLvoid (APIENTRY *PFNVBOXVHWA_MULTI_TEX_COORD2D) (GLenum texture, GLdouble v0, GLdouble v1);
#ifndef GL_TEXTURE_RECTANGLE
typedef GLvoid (APIENTRY *PFNVBOXVHWA_SHADER_SOURCE) (GLuint shader, GLsizei count, const GLchar **string, const GLint *length);
typedef GLvoid (APIENTRY *PFNVBOXVHWA_GET_ATTACHED_SHADERS) (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *shaders);
typedef GLvoid (APIENTRY *PFNVBOXVHWA_GET_SHADER_INFO_LOG) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
typedef GLvoid (APIENTRY *PFNVBOXVHWA_GET_PROGRAM_INFO_LOG) (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
typedef GLvoid (APIENTRY *PFNVBOXVHWA_UNIFORM3F)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
typedef GLvoid (APIENTRY *PFNVBOXVHWA_UNIFORM4F)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
typedef GLvoid (APIENTRY *PFNVBOXVHWA_UNIFORM4I)(GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
#ifndef Q_WS_MAC
#ifndef GL_READ_ONLY
#ifndef GL_WRITE_ONLY
#ifndef GL_READ_WRITE
#ifndef GL_STREAM_DRAW
#ifndef GL_STREAM_READ
#ifndef GL_STREAM_COPY
#ifndef GL_PIXEL_PACK_BUFFER
#ifndef GL_PIXEL_UNPACK_BUFFER
#ifndef GL_PIXEL_PACK_BUFFER_BINDING
#ifndef GL_PIXEL_UNPACK_BUFFER_BINDING
typedef GLvoid (APIENTRY *PFNVBOXVHWA_BUFFER_DATA)(GLenum target, GLsizeiptr size, const GLvoid *data, GLenum usage);
VBoxGLInfo() :
mGLVersion(0),
mFragmentShaderSupported(false),
mTextureRectangleSupported(false),
mTextureNP2Supported(false),
mPBOSupported(false),
m_GL_ARB_multitexture(false),
m_GL_ARB_shader_objects(false),
m_GL_ARB_fragment_shader(false),
m_GL_ARB_pixel_buffer_object(false),
m_GL_ARB_texture_rectangle(false),
m_GL_EXT_texture_rectangle(false),
m_GL_NV_texture_rectangle(false),
mInitialized(false)
int mGLVersion;
bool mFragmentShaderSupported;
bool mTextureNP2Supported;
bool mPBOSupported;
bool m_GL_ARB_multitexture;
bool m_GL_ARB_shader_objects;
bool m_GL_ARB_fragment_shader;
bool mInitialized;
~VBoxGLTmpContext();
VBoxVHWAInfo() :
mInitialized(false)
mInitialized(false)
bool isVHWASupported() const;
static bool checkVHWASupport();
bool mInitialized;