1dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/* 2dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Copyright (C) 2010 Tieto Corporation. 3dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 4dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block This library is free software; you can redistribute it and/or 5dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block modify it under the terms of the GNU Lesser General Public 6dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block License as published by the Free Software Foundation; either 7dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block version 2.1 of the License, or (at your option) any later version. 8dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 9dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block This library is distributed in the hope that it will be useful, 10dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block but WITHOUT ANY WARRANTY; without even the implied warranty of 11dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Lesser General Public License for more details. 13dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 14dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block You should have received a copy of the GNU Lesser General Public 15dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block License along with this library; if not, write to the Free Software 16dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 17dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block*/ 18dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 19dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "config.h" 20dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 21dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "GraphicsContext3D.h" 22dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 23dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch#include "WebGLObject.h" 24dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch#include "CanvasRenderingContext.h" 2528040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu#include "Extensions3DQt.h" 26dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "GraphicsContext.h" 27dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "HTMLCanvasElement.h" 28dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "HostWindow.h" 29dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "ImageBuffer.h" 302bde8e466a4451c7319e3a072d118917957d6554Steve Block#include "ImageData.h" 31dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "NotImplemented.h" 32dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "QWebPageClient.h" 332bde8e466a4451c7319e3a072d118917957d6554Steve Block#include "qwebpage.h" 34dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include <QAbstractScrollArea> 352bde8e466a4451c7319e3a072d118917957d6554Steve Block#include <QGraphicsObject> 36545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch#include <QGLContext> 372bde8e466a4451c7319e3a072d118917957d6554Steve Block#include <QStyleOptionGraphicsItem> 38dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include <wtf/UnusedParam.h> 39dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include <wtf/text/CString.h> 40dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 412fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#if ENABLE(WEBGL) 42dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 43dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocknamespace WebCore { 44dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 45dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#if !defined(GLchar) 46dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef char GLchar; 47dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#endif 48dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 492bde8e466a4451c7319e3a072d118917957d6554Steve Block#if !defined(GL_DEPTH24_STENCIL8) 502bde8e466a4451c7319e3a072d118917957d6554Steve Block#define GL_DEPTH24_STENCIL8 0x88F0 512bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif 522bde8e466a4451c7319e3a072d118917957d6554Steve Block 53dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#if !defined(APIENTRY) 54dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#define APIENTRY 55dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#endif 56dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 5706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen#ifdef QT_OPENGL_ES_2 5806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsentypedef GLsizeiptr GLsizeiptrType; 5906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsentypedef GLintptr GLintptrType; 6006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen#else 61dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef ptrdiff_t GLsizeiptrType; 62dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef ptrdiff_t GLintptrType; 6306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen#endif 64dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 65dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef void (APIENTRY* glActiveTextureType) (GLenum); 66dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef void (APIENTRY* glAttachShaderType) (GLuint, GLuint); 67dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef void (APIENTRY* glBindAttribLocationType) (GLuint, GLuint, const char*); 68dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef void (APIENTRY* glBindBufferType) (GLenum, GLuint); 69dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef void (APIENTRY* glBindFramebufferType) (GLenum, GLuint); 70dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef void (APIENTRY* glBindRenderbufferType) (GLenum, GLuint); 71dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef void (APIENTRY* glBlendColorType) (GLclampf, GLclampf, GLclampf, GLclampf); 72dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef void (APIENTRY* glBlendEquationType) (GLenum); 73dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef void (APIENTRY* glBlendEquationSeparateType)(GLenum, GLenum); 74dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef void (APIENTRY* glBlendFuncSeparateType)(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); 75dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef void (APIENTRY* glBufferDataType) (GLenum, GLsizeiptrType, const GLvoid*, GLenum); 76dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef void (APIENTRY* glBufferSubDataType) (GLenum, GLintptrType, GLsizeiptrType, const GLvoid*); 77dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef GLenum (APIENTRY* glCheckFramebufferStatusType) (GLenum); 78dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef void (APIENTRY* glCompileShaderType) (GLuint); 79dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef GLuint (APIENTRY* glCreateProgramType) (); 80dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef GLuint (APIENTRY* glCreateShaderType) (GLenum); 81dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef void (APIENTRY* glDeleteBuffersType) (GLsizei, const GLuint*); 82dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef void (APIENTRY* glDeleteFramebuffersType) (GLsizei n, const GLuint*); 83dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef void (APIENTRY* glDeleteProgramType) (GLuint); 84dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef void (APIENTRY* glDeleteRenderbuffersType) (GLsizei n, const GLuint*); 85dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef void (APIENTRY* glDeleteShaderType) (GLuint); 86dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef void (APIENTRY* glDetachShaderType) (GLuint, GLuint); 87dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef void (APIENTRY* glDisableVertexAttribArrayType) (GLuint); 88dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef void (APIENTRY* glEnableVertexAttribArrayType) (GLuint); 89dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef void (APIENTRY* glFramebufferRenderbufferType) (GLenum, GLenum, GLenum, GLuint); 90dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef void (APIENTRY* glFramebufferTexture2DType) (GLenum, GLenum, GLenum, GLuint, GLint); 91dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef void (APIENTRY* glGenBuffersType) (GLsizei, GLuint*); 92dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef void (APIENTRY* glGenerateMipmapType) (GLenum target); 93dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef void (APIENTRY* glGenFramebuffersType) (GLsizei, GLuint*); 94dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef void (APIENTRY* glGenRenderbuffersType) (GLsizei, GLuint*); 95dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef void (APIENTRY* glGetActiveAttribType) (GLuint, GLuint, GLsizei, GLsizei*, GLint*, GLenum*, GLchar*); 96dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef void (APIENTRY* glGetActiveUniformType) (GLuint, GLuint, GLsizei, GLsizei*, GLint*, GLenum*, GLchar*); 97e8b154fd68f9b33be40a3590e58347f353835f5cSteve Blocktypedef void (APIENTRY* glGetAttachedShadersType) (GLuint, GLsizei, GLsizei*, GLuint*); 98dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef GLint (APIENTRY* glGetAttribLocationType) (GLuint, const char*); 99dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef void (APIENTRY* glGetBufferParameterivType) (GLenum, GLenum, GLint*); 100dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef void (APIENTRY* glGetFramebufferAttachmentParameterivType) (GLenum, GLenum, GLenum, GLint* params); 101dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef void (APIENTRY* glGetProgramInfoLogType) (GLuint, GLsizei, GLsizei*, char*); 102dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef void (APIENTRY* glGetProgramivType) (GLuint, GLenum, GLint*); 103dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef void (APIENTRY* glGetRenderbufferParameterivType) (GLenum, GLenum, GLint*); 104dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef void (APIENTRY* glGetShaderInfoLogType) (GLuint, GLsizei, GLsizei*, char*); 105dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef void (APIENTRY* glGetShaderivType) (GLuint, GLenum, GLint*); 106dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef void (APIENTRY* glGetShaderSourceType) (GLuint, GLsizei, GLsizei*, char*); 107dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef GLint (APIENTRY* glGetUniformLocationType) (GLuint, const char*); 108dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef void (APIENTRY* glGetUniformfvType) (GLuint, GLint, GLfloat*); 109dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef void (APIENTRY* glGetUniformivType) (GLuint, GLint, GLint*); 110dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef void (APIENTRY* glGetVertexAttribfvType) (GLuint, GLenum, GLfloat*); 111dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef void (APIENTRY* glGetVertexAttribivType) (GLuint, GLenum, GLint*); 112dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef void (APIENTRY* glGetVertexAttribPointervType) (GLuint, GLenum, GLvoid**); 113dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef GLboolean (APIENTRY* glIsBufferType) (GLuint); 114dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef GLboolean (APIENTRY* glIsFramebufferType) (GLuint); 115dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef GLboolean (APIENTRY* glIsProgramType) (GLuint); 116dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef GLboolean (APIENTRY* glIsRenderbufferType) (GLuint); 117dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef GLboolean (APIENTRY* glIsShaderType) (GLuint); 118dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef void (APIENTRY* glLinkProgramType) (GLuint); 119dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef void (APIENTRY* glRenderbufferStorageType) (GLenum, GLenum, GLsizei, GLsizei); 120dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef void (APIENTRY* glSampleCoverageType) (GLclampf, GLboolean); 121dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef void (APIENTRY* glShaderSourceType) (GLuint, GLsizei, const char**, const GLint*); 122dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef void (APIENTRY* glStencilFuncSeparateType) (GLenum, GLenum, GLint, GLuint); 123dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef void (APIENTRY* glStencilMaskSeparateType) (GLenum, GLuint); 124dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef void (APIENTRY* glStencilOpSeparateType) (GLenum, GLenum, GLenum, GLenum); 125dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef void (APIENTRY* glUniform1fType) (GLint, GLfloat); 126dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef void (APIENTRY* glUniform1fvType) (GLint, GLsizei, const GLfloat*); 127dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef void (APIENTRY* glUniform1iType) (GLint, GLint); 128dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef void (APIENTRY* glUniform1ivType) (GLint, GLsizei, const GLint*); 129dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef void (APIENTRY* glUniform2fType) (GLint, GLfloat, GLfloat); 130dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef void (APIENTRY* glUniform2fvType) (GLint, GLsizei, const GLfloat*); 131dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef void (APIENTRY* glUniform2iType) (GLint, GLint, GLint); 132dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef void (APIENTRY* glUniform2ivType) (GLint, GLsizei, const GLint*); 133dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef void (APIENTRY* glUniform3fType) (GLint, GLfloat, GLfloat, GLfloat); 134dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef void (APIENTRY* glUniform3fvType) (GLint, GLsizei, const GLfloat*); 135dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef void (APIENTRY* glUniform3iType) (GLint, GLint, GLint, GLint); 136dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef void (APIENTRY* glUniform3ivType) (GLint, GLsizei, const GLint*); 137dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef void (APIENTRY* glUniform4fType) (GLint, GLfloat, GLfloat, GLfloat, GLfloat); 138dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef void (APIENTRY* glUniform4fvType) (GLint, GLsizei, const GLfloat*); 139dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef void (APIENTRY* glUniform4iType) (GLint, GLint, GLint, GLint, GLint); 140dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef void (APIENTRY* glUniform4ivType) (GLint, GLsizei, const GLint*); 141dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef void (APIENTRY* glUniformMatrix2fvType) (GLint, GLsizei, GLboolean, const GLfloat*); 142dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef void (APIENTRY* glUniformMatrix3fvType) (GLint, GLsizei, GLboolean, const GLfloat*); 143dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef void (APIENTRY* glUniformMatrix4fvType) (GLint, GLsizei, GLboolean, const GLfloat*); 144dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef void (APIENTRY* glUseProgramType) (GLuint); 145dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef void (APIENTRY* glValidateProgramType) (GLuint); 146dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef void (APIENTRY* glVertexAttrib1fType) (GLuint, const GLfloat); 147dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef void (APIENTRY* glVertexAttrib1fvType) (GLuint, const GLfloat*); 148dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef void (APIENTRY* glVertexAttrib2fType) (GLuint, const GLfloat, const GLfloat); 149dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef void (APIENTRY* glVertexAttrib2fvType) (GLuint, const GLfloat*); 150dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef void (APIENTRY* glVertexAttrib3fType) (GLuint, const GLfloat, const GLfloat, const GLfloat); 151dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef void (APIENTRY* glVertexAttrib3fvType) (GLuint, const GLfloat*); 152dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef void (APIENTRY* glVertexAttrib4fType) (GLuint, const GLfloat, const GLfloat, const GLfloat, const GLfloat); 153dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef void (APIENTRY* glVertexAttrib4fvType) (GLuint, const GLfloat*); 154dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef void (APIENTRY* glVertexAttribPointerType) (GLuint, GLint, GLenum, GLboolean, GLsizei, const GLvoid*); 155dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1562bde8e466a4451c7319e3a072d118917957d6554Steve Blockclass GraphicsContext3DInternal : public QGraphicsObject { 157dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockpublic: 158dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block GraphicsContext3DInternal(GraphicsContext3D::Attributes attrs, HostWindow* hostWindow); 159dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ~GraphicsContext3DInternal(); 160dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1612bde8e466a4451c7319e3a072d118917957d6554Steve Block bool isValid() { return m_valid; } 1622bde8e466a4451c7319e3a072d118917957d6554Steve Block 1632bde8e466a4451c7319e3a072d118917957d6554Steve Block QGLWidget* getViewportGLWidget(); 1642bde8e466a4451c7319e3a072d118917957d6554Steve Block void reshape(int width, int height); 1652bde8e466a4451c7319e3a072d118917957d6554Steve Block void paint(QPainter*, const QStyleOptionGraphicsItem*, QWidget*); 1662bde8e466a4451c7319e3a072d118917957d6554Steve Block QRectF boundingRect() const; 167dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 168dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glActiveTextureType activeTexture; 169dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glAttachShaderType attachShader; 170dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glBindAttribLocationType bindAttribLocation; 171dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glBindBufferType bindBuffer; 172dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glBindFramebufferType bindFramebuffer; 173dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glBindRenderbufferType bindRenderbuffer; 174dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glBlendColorType blendColor; 175dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glBlendEquationType blendEquation; 176dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glBlendEquationSeparateType blendEquationSeparate; 177dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glBlendFuncSeparateType blendFuncSeparate; 178dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glBufferDataType bufferData; 179dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glBufferSubDataType bufferSubData; 180dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glCheckFramebufferStatusType checkFramebufferStatus; 181dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glCompileShaderType compileShader; 182dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glCreateProgramType createProgram; 183dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glCreateShaderType createShader; 184dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glDeleteBuffersType deleteBuffers; 185dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glDeleteFramebuffersType deleteFramebuffers; 186dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glDeleteProgramType deleteProgram; 187dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glDeleteRenderbuffersType deleteRenderbuffers; 188dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glDeleteShaderType deleteShader; 189dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glDetachShaderType detachShader; 190dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glDisableVertexAttribArrayType disableVertexAttribArray; 191dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glEnableVertexAttribArrayType enableVertexAttribArray; 192dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glFramebufferRenderbufferType framebufferRenderbuffer; 193dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glFramebufferTexture2DType framebufferTexture2D; 194dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glGenBuffersType genBuffers; 195dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glGenerateMipmapType generateMipmap; 196dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glGenFramebuffersType genFramebuffers; 197dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glGenRenderbuffersType genRenderbuffers; 198dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glGetActiveAttribType getActiveAttrib; 199dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glGetActiveUniformType getActiveUniform; 200e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block glGetAttachedShadersType getAttachedShaders; 201dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glGetAttribLocationType getAttribLocation; 202dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glGetBufferParameterivType getBufferParameteriv; 203dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glGetFramebufferAttachmentParameterivType getFramebufferAttachmentParameteriv; 204dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glGetProgramInfoLogType getProgramInfoLog; 205dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glGetProgramivType getProgramiv; 206dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glGetRenderbufferParameterivType getRenderbufferParameteriv; 207dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glGetShaderInfoLogType getShaderInfoLog; 208dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glGetShaderivType getShaderiv; 209dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glGetShaderSourceType getShaderSource; 210dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glGetUniformfvType getUniformfv; 211dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glGetUniformivType getUniformiv; 212dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glGetUniformLocationType getUniformLocation; 213dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glGetVertexAttribfvType getVertexAttribfv; 214dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glGetVertexAttribivType getVertexAttribiv; 215dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glGetVertexAttribPointervType getVertexAttribPointerv; 216dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glIsBufferType isBuffer; 217dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glIsFramebufferType isFramebuffer; 218dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glIsProgramType isProgram; 219dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glIsRenderbufferType isRenderbuffer; 220dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glIsShaderType isShader; 221dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glLinkProgramType linkProgram; 222dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glRenderbufferStorageType renderbufferStorage; 223dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glSampleCoverageType sampleCoverage; 224dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glShaderSourceType shaderSource; 225dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glStencilFuncSeparateType stencilFuncSeparate; 226dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glStencilMaskSeparateType stencilMaskSeparate; 227dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glStencilOpSeparateType stencilOpSeparate; 228dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glUniform1fType uniform1f; 229dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glUniform1fvType uniform1fv; 230dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glUniform1iType uniform1i; 231dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glUniform1ivType uniform1iv; 232dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glUniform2fType uniform2f; 233dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glUniform2fvType uniform2fv; 234dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glUniform2iType uniform2i; 235dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glUniform2ivType uniform2iv; 236dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glUniform3fType uniform3f; 237dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glUniform3fvType uniform3fv; 238dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glUniform3iType uniform3i; 239dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glUniform3ivType uniform3iv; 240dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glUniform4fType uniform4f; 241dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glUniform4fvType uniform4fv; 242dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glUniform4iType uniform4i; 243dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glUniform4ivType uniform4iv; 244dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glUniformMatrix2fvType uniformMatrix2fv; 245dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glUniformMatrix3fvType uniformMatrix3fv; 246dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glUniformMatrix4fvType uniformMatrix4fv; 247dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glUseProgramType useProgram; 248dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glValidateProgramType validateProgram; 249dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glVertexAttrib1fType vertexAttrib1f; 250dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glVertexAttrib1fvType vertexAttrib1fv; 251dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glVertexAttrib2fType vertexAttrib2f; 252dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glVertexAttrib2fvType vertexAttrib2fv; 253dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glVertexAttrib3fType vertexAttrib3f; 254dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glVertexAttrib3fvType vertexAttrib3fv; 255dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glVertexAttrib4fType vertexAttrib4f; 256dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glVertexAttrib4fvType vertexAttrib4fv; 257dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glVertexAttribPointerType vertexAttribPointer; 258dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 259dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block GraphicsContext3D::Attributes m_attrs; 26021939df44de1705786c545cd1bf519d47250322dBen Murdoch HostWindow* m_hostWindow; 261dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block QGLWidget* m_glWidget; 2622bde8e466a4451c7319e3a072d118917957d6554Steve Block QGLWidget* m_viewportGLWidget; 2632bde8e466a4451c7319e3a072d118917957d6554Steve Block QRectF m_boundingRect; 264dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block GLuint m_texture; 2652bde8e466a4451c7319e3a072d118917957d6554Steve Block GLuint m_canvasFbo; 266dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block GLuint m_currentFbo; 267dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block GLuint m_depthBuffer; 2682bde8e466a4451c7319e3a072d118917957d6554Steve Block bool m_layerComposited; 26981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch ListHashSet<unsigned int> m_syntheticErrors; 270dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 27128040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu OwnPtr<Extensions3DQt> m_extensions; 27228040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu 273dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockprivate: 274dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 275dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block void* getProcAddress(const String& proc); 2762bde8e466a4451c7319e3a072d118917957d6554Steve Block bool m_valid; 277dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block}; 278dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 279dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#if defined (QT_OPENGL_ES_2) 280dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#define GET_PROC_ADDRESS(Proc) Proc 281dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#else 282dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#define GET_PROC_ADDRESS(Proc) reinterpret_cast<Proc##Type>(getProcAddress(#Proc)); 283dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#endif 28421939df44de1705786c545cd1bf519d47250322dBen Murdoch 28521939df44de1705786c545cd1bf519d47250322dBen Murdochbool GraphicsContext3D::isGLES2Compliant() const 28621939df44de1705786c545cd1bf519d47250322dBen Murdoch{ 28721939df44de1705786c545cd1bf519d47250322dBen Murdoch#if defined (QT_OPENGL_ES_2) 28821939df44de1705786c545cd1bf519d47250322dBen Murdoch return true; 28921939df44de1705786c545cd1bf519d47250322dBen Murdoch#else 29021939df44de1705786c545cd1bf519d47250322dBen Murdoch return false; 29121939df44de1705786c545cd1bf519d47250322dBen Murdoch#endif 29221939df44de1705786c545cd1bf519d47250322dBen Murdoch} 29321939df44de1705786c545cd1bf519d47250322dBen Murdoch 294dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockGraphicsContext3DInternal::GraphicsContext3DInternal(GraphicsContext3D::Attributes attrs, HostWindow* hostWindow) 295dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block : m_attrs(attrs) 29621939df44de1705786c545cd1bf519d47250322dBen Murdoch , m_hostWindow(hostWindow) 297dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block , m_glWidget(0) 2982bde8e466a4451c7319e3a072d118917957d6554Steve Block , m_viewportGLWidget(0) 299dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block , m_texture(0) 3002bde8e466a4451c7319e3a072d118917957d6554Steve Block , m_canvasFbo(0) 301dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block , m_currentFbo(0) 302dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block , m_depthBuffer(0) 3032bde8e466a4451c7319e3a072d118917957d6554Steve Block , m_layerComposited(false) 3042bde8e466a4451c7319e3a072d118917957d6554Steve Block , m_valid(true) 305dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 3062bde8e466a4451c7319e3a072d118917957d6554Steve Block m_viewportGLWidget = getViewportGLWidget(); 307dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 3082bde8e466a4451c7319e3a072d118917957d6554Steve Block if (m_viewportGLWidget) 3092bde8e466a4451c7319e3a072d118917957d6554Steve Block m_glWidget = new QGLWidget(0, m_viewportGLWidget); 3102bde8e466a4451c7319e3a072d118917957d6554Steve Block else 3112bde8e466a4451c7319e3a072d118917957d6554Steve Block m_glWidget = new QGLWidget(); 312dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 313dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!m_glWidget->isValid()) { 3142bde8e466a4451c7319e3a072d118917957d6554Steve Block LOG_ERROR("GraphicsContext3D: QGLWidget initialization failed."); 3152bde8e466a4451c7319e3a072d118917957d6554Steve Block m_valid = false; 316dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return; 317dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 318dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 3192bde8e466a4451c7319e3a072d118917957d6554Steve Block // Geometry can be set to zero because m_glWidget is used only for its QGLContext. 3202bde8e466a4451c7319e3a072d118917957d6554Steve Block m_glWidget->setGeometry(0, 0, 0, 0); 3212bde8e466a4451c7319e3a072d118917957d6554Steve Block 3222bde8e466a4451c7319e3a072d118917957d6554Steve Block#if defined(QT_OPENGL_ES_2) 3232bde8e466a4451c7319e3a072d118917957d6554Steve Block m_attrs.stencil = false; 3242bde8e466a4451c7319e3a072d118917957d6554Steve Block#else 3252bde8e466a4451c7319e3a072d118917957d6554Steve Block if (m_attrs.stencil) 3262bde8e466a4451c7319e3a072d118917957d6554Steve Block m_attrs.depth = true; 3272bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif 328dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_attrs.antialias = false; 329dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 330dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_glWidget->makeCurrent(); 331dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 332dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block activeTexture = GET_PROC_ADDRESS(glActiveTexture); 333dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block attachShader = GET_PROC_ADDRESS(glAttachShader); 334dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block bindAttribLocation = GET_PROC_ADDRESS(glBindAttribLocation); 335dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block bindBuffer = GET_PROC_ADDRESS(glBindBuffer); 336dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block bindFramebuffer = GET_PROC_ADDRESS(glBindFramebuffer); 337dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block bindRenderbuffer = GET_PROC_ADDRESS(glBindRenderbuffer); 338dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block blendColor = GET_PROC_ADDRESS(glBlendColor); 339dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block blendEquation = GET_PROC_ADDRESS(glBlendEquation); 340dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block blendEquationSeparate = GET_PROC_ADDRESS(glBlendEquationSeparate); 341dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block blendFuncSeparate = GET_PROC_ADDRESS(glBlendFuncSeparate); 342dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block bufferData = GET_PROC_ADDRESS(glBufferData); 343dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block bufferSubData = GET_PROC_ADDRESS(glBufferSubData); 344dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block checkFramebufferStatus = GET_PROC_ADDRESS(glCheckFramebufferStatus); 345dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block compileShader = GET_PROC_ADDRESS(glCompileShader); 346dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block createProgram = GET_PROC_ADDRESS(glCreateProgram); 347dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block createShader = GET_PROC_ADDRESS(glCreateShader); 348dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block deleteBuffers = GET_PROC_ADDRESS(glDeleteBuffers); 349dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block deleteFramebuffers = GET_PROC_ADDRESS(glDeleteFramebuffers); 350dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block deleteProgram = GET_PROC_ADDRESS(glDeleteProgram); 351dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block deleteRenderbuffers = GET_PROC_ADDRESS(glDeleteRenderbuffers); 352dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block deleteShader = GET_PROC_ADDRESS(glDeleteShader); 353dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block detachShader = GET_PROC_ADDRESS(glDetachShader); 354dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block disableVertexAttribArray = GET_PROC_ADDRESS(glDisableVertexAttribArray); 355dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block enableVertexAttribArray = GET_PROC_ADDRESS(glEnableVertexAttribArray); 356dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block framebufferRenderbuffer = GET_PROC_ADDRESS(glFramebufferRenderbuffer); 357dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block framebufferTexture2D = GET_PROC_ADDRESS(glFramebufferTexture2D); 358dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block genBuffers = GET_PROC_ADDRESS(glGenBuffers); 359dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block generateMipmap = GET_PROC_ADDRESS(glGenerateMipmap); 360dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block genFramebuffers = GET_PROC_ADDRESS(glGenFramebuffers); 361dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block genRenderbuffers = GET_PROC_ADDRESS(glGenRenderbuffers); 362dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block getActiveAttrib = GET_PROC_ADDRESS(glGetActiveAttrib); 363dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block getActiveUniform = GET_PROC_ADDRESS(glGetActiveUniform); 364e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block getAttachedShaders = GET_PROC_ADDRESS(glGetAttachedShaders); 365dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block getAttribLocation = GET_PROC_ADDRESS(glGetAttribLocation); 366dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block getBufferParameteriv = GET_PROC_ADDRESS(glGetBufferParameteriv); 367dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block getFramebufferAttachmentParameteriv = GET_PROC_ADDRESS(glGetFramebufferAttachmentParameteriv); 368dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block getProgramInfoLog = GET_PROC_ADDRESS(glGetProgramInfoLog); 369dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block getProgramiv = GET_PROC_ADDRESS(glGetProgramiv); 370dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block getRenderbufferParameteriv = GET_PROC_ADDRESS(glGetRenderbufferParameteriv); 371dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block getShaderInfoLog = GET_PROC_ADDRESS(glGetShaderInfoLog); 372dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block getShaderiv = GET_PROC_ADDRESS(glGetShaderiv); 373dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block getShaderSource = GET_PROC_ADDRESS(glGetShaderSource); 374dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block getUniformfv = GET_PROC_ADDRESS(glGetUniformfv); 375dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block getUniformiv = GET_PROC_ADDRESS(glGetUniformiv); 376dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block getUniformLocation = GET_PROC_ADDRESS(glGetUniformLocation); 377dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block getVertexAttribfv = GET_PROC_ADDRESS(glGetVertexAttribfv); 378dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block getVertexAttribiv = GET_PROC_ADDRESS(glGetVertexAttribiv); 379dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block getVertexAttribPointerv = GET_PROC_ADDRESS(glGetVertexAttribPointerv); 380dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block isBuffer = GET_PROC_ADDRESS(glIsBuffer); 381dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block isFramebuffer = GET_PROC_ADDRESS(glIsFramebuffer); 382dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block isProgram = GET_PROC_ADDRESS(glIsProgram); 383dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block isRenderbuffer = GET_PROC_ADDRESS(glIsRenderbuffer); 384dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block isShader = GET_PROC_ADDRESS(glIsShader); 385dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block linkProgram = GET_PROC_ADDRESS(glLinkProgram); 386dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block renderbufferStorage = GET_PROC_ADDRESS(glRenderbufferStorage); 387dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block sampleCoverage = GET_PROC_ADDRESS(glSampleCoverage); 388dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block shaderSource = GET_PROC_ADDRESS(glShaderSource); 389dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block stencilFuncSeparate = GET_PROC_ADDRESS(glStencilFuncSeparate); 390dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block stencilMaskSeparate = GET_PROC_ADDRESS(glStencilMaskSeparate); 391dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block stencilOpSeparate = GET_PROC_ADDRESS(glStencilOpSeparate); 392dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block uniform1f = GET_PROC_ADDRESS(glUniform1f); 393dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block uniform1fv = GET_PROC_ADDRESS(glUniform1fv); 394dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block uniform1i = GET_PROC_ADDRESS(glUniform1i); 395dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block uniform1iv = GET_PROC_ADDRESS(glUniform1iv); 396dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block uniform2f = GET_PROC_ADDRESS(glUniform2f); 397dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block uniform2fv = GET_PROC_ADDRESS(glUniform2fv); 398dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block uniform2i = GET_PROC_ADDRESS(glUniform2i); 399dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block uniform2iv = GET_PROC_ADDRESS(glUniform2iv); 400dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block uniform3f = GET_PROC_ADDRESS(glUniform3f); 401dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block uniform3fv = GET_PROC_ADDRESS(glUniform3fv); 402dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block uniform3i = GET_PROC_ADDRESS(glUniform3i); 403dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block uniform3iv = GET_PROC_ADDRESS(glUniform3iv); 404dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block uniform4f = GET_PROC_ADDRESS(glUniform4f); 405dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block uniform4fv = GET_PROC_ADDRESS(glUniform4fv); 406dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block uniform4i = GET_PROC_ADDRESS(glUniform4i); 407dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block uniform4iv = GET_PROC_ADDRESS(glUniform4iv); 408dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block uniformMatrix2fv = GET_PROC_ADDRESS(glUniformMatrix2fv); 409dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block uniformMatrix3fv = GET_PROC_ADDRESS(glUniformMatrix3fv); 410dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block uniformMatrix4fv = GET_PROC_ADDRESS(glUniformMatrix4fv); 411dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block useProgram = GET_PROC_ADDRESS(glUseProgram); 412dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block validateProgram = GET_PROC_ADDRESS(glValidateProgram); 413dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block vertexAttrib1f = GET_PROC_ADDRESS(glVertexAttrib1f); 414dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block vertexAttrib1fv = GET_PROC_ADDRESS(glVertexAttrib1fv); 415dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block vertexAttrib2f = GET_PROC_ADDRESS(glVertexAttrib2f); 416dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block vertexAttrib2fv = GET_PROC_ADDRESS(glVertexAttrib2fv); 417dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block vertexAttrib3f = GET_PROC_ADDRESS(glVertexAttrib3f); 418dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block vertexAttrib3fv = GET_PROC_ADDRESS(glVertexAttrib3fv); 419dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block vertexAttrib4f = GET_PROC_ADDRESS(glVertexAttrib4f); 420dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block vertexAttrib4fv = GET_PROC_ADDRESS(glVertexAttrib4fv); 421dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block vertexAttribPointer = GET_PROC_ADDRESS(glVertexAttribPointer); 422dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 4232bde8e466a4451c7319e3a072d118917957d6554Steve Block if (!m_valid) { 424dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block LOG_ERROR("GraphicsContext3D: All needed OpenGL extensions are not available"); 425dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return; 426dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 427dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 4282bde8e466a4451c7319e3a072d118917957d6554Steve Block // Create buffers for the canvas FBO. 4292bde8e466a4451c7319e3a072d118917957d6554Steve Block genFramebuffers(/* count */ 1, &m_canvasFbo); 4302bde8e466a4451c7319e3a072d118917957d6554Steve Block 431dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glGenTextures(1, &m_texture); 432dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glBindTexture(GraphicsContext3D::TEXTURE_2D, m_texture); 433dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glTexParameterf(GraphicsContext3D::TEXTURE_2D, GraphicsContext3D::TEXTURE_MAG_FILTER, GraphicsContext3D::LINEAR); 434dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glTexParameterf(GraphicsContext3D::TEXTURE_2D, GraphicsContext3D::TEXTURE_MIN_FILTER, GraphicsContext3D::LINEAR); 435dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glTexParameteri(GraphicsContext3D::TEXTURE_2D, GraphicsContext3D::TEXTURE_WRAP_S, GraphicsContext3D::CLAMP_TO_EDGE); 436dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glTexParameteri(GraphicsContext3D::TEXTURE_2D, GraphicsContext3D::TEXTURE_WRAP_T, GraphicsContext3D::CLAMP_TO_EDGE); 437dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glBindTexture(GraphicsContext3D::TEXTURE_2D, 0); 438dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 4392bde8e466a4451c7319e3a072d118917957d6554Steve Block if (m_attrs.depth) 4402bde8e466a4451c7319e3a072d118917957d6554Steve Block genRenderbuffers(/* count */ 1, &m_depthBuffer); 4412bde8e466a4451c7319e3a072d118917957d6554Steve Block 4422bde8e466a4451c7319e3a072d118917957d6554Steve Block // Bind canvas FBO and set initial clear color to black. 4432bde8e466a4451c7319e3a072d118917957d6554Steve Block m_currentFbo = m_canvasFbo; 4442bde8e466a4451c7319e3a072d118917957d6554Steve Block bindFramebuffer(GraphicsContext3D::FRAMEBUFFER, m_canvasFbo); 4452bde8e466a4451c7319e3a072d118917957d6554Steve Block glClearColor(0.0, 0.0, 0.0, 0.0); 4462bde8e466a4451c7319e3a072d118917957d6554Steve Block} 4472bde8e466a4451c7319e3a072d118917957d6554Steve Block 4482bde8e466a4451c7319e3a072d118917957d6554Steve BlockGraphicsContext3DInternal::~GraphicsContext3DInternal() 4492bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 4502daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch m_glWidget->makeCurrent(); 4512daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if (m_glWidget->isValid()) { 4522daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch ::glDeleteTextures(1, &m_texture); 4532daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch deleteRenderbuffers(1, &m_depthBuffer); 4542daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch deleteFramebuffers(1, &m_canvasFbo); 4552daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch } 4562bde8e466a4451c7319e3a072d118917957d6554Steve Block delete m_glWidget; 4572bde8e466a4451c7319e3a072d118917957d6554Steve Block m_glWidget = 0; 4582bde8e466a4451c7319e3a072d118917957d6554Steve Block} 4592bde8e466a4451c7319e3a072d118917957d6554Steve Block 4602bde8e466a4451c7319e3a072d118917957d6554Steve BlockQGLWidget* GraphicsContext3DInternal::getViewportGLWidget() 4612bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 4622bde8e466a4451c7319e3a072d118917957d6554Steve Block QWebPageClient* webPageClient = m_hostWindow->platformPageClient(); 4632bde8e466a4451c7319e3a072d118917957d6554Steve Block if (!webPageClient) 4642bde8e466a4451c7319e3a072d118917957d6554Steve Block return 0; 4652bde8e466a4451c7319e3a072d118917957d6554Steve Block 4662bde8e466a4451c7319e3a072d118917957d6554Steve Block QAbstractScrollArea* scrollArea = qobject_cast<QAbstractScrollArea*>(webPageClient->ownerWidget()); 4672bde8e466a4451c7319e3a072d118917957d6554Steve Block if (scrollArea) 4682bde8e466a4451c7319e3a072d118917957d6554Steve Block return qobject_cast<QGLWidget*>(scrollArea->viewport()); 4692bde8e466a4451c7319e3a072d118917957d6554Steve Block 4702bde8e466a4451c7319e3a072d118917957d6554Steve Block return 0; 4712bde8e466a4451c7319e3a072d118917957d6554Steve Block} 4722bde8e466a4451c7319e3a072d118917957d6554Steve Block 4732bde8e466a4451c7319e3a072d118917957d6554Steve Blockstatic inline quint32 swapBgrToRgb(quint32 pixel) 4742bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 4752bde8e466a4451c7319e3a072d118917957d6554Steve Block return ((pixel << 16) & 0xff0000) | ((pixel >> 16) & 0xff) | (pixel & 0xff00ff00); 4762bde8e466a4451c7319e3a072d118917957d6554Steve Block} 4772bde8e466a4451c7319e3a072d118917957d6554Steve Block 4782bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid GraphicsContext3DInternal::reshape(int width, int height) 4792bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 4802bde8e466a4451c7319e3a072d118917957d6554Steve Block if (width == m_boundingRect.width() && height == m_boundingRect.height()) 4812bde8e466a4451c7319e3a072d118917957d6554Steve Block return; 4822bde8e466a4451c7319e3a072d118917957d6554Steve Block 4832bde8e466a4451c7319e3a072d118917957d6554Steve Block m_boundingRect = QRectF(QPointF(0, 0), QSizeF(width, height)); 4842bde8e466a4451c7319e3a072d118917957d6554Steve Block 4852bde8e466a4451c7319e3a072d118917957d6554Steve Block m_glWidget->makeCurrent(); 486dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 4872bde8e466a4451c7319e3a072d118917957d6554Steve Block // Create color buffer 4882bde8e466a4451c7319e3a072d118917957d6554Steve Block glBindTexture(GraphicsContext3D::TEXTURE_2D, m_texture); 4892bde8e466a4451c7319e3a072d118917957d6554Steve Block if (m_attrs.alpha) 4902bde8e466a4451c7319e3a072d118917957d6554Steve Block glTexImage2D(GraphicsContext3D::TEXTURE_2D, /* level */ 0, GraphicsContext3D::RGBA, width, height, /* border */ 0, GraphicsContext3D::RGBA, GraphicsContext3D::UNSIGNED_BYTE, /* data */ 0); 4912bde8e466a4451c7319e3a072d118917957d6554Steve Block else 4922bde8e466a4451c7319e3a072d118917957d6554Steve Block glTexImage2D(GraphicsContext3D::TEXTURE_2D, /* level */ 0, GraphicsContext3D::RGB, width, height, /* border */ 0, GraphicsContext3D::RGB, GraphicsContext3D::UNSIGNED_BYTE, /* data */ 0); 4932bde8e466a4451c7319e3a072d118917957d6554Steve Block glBindTexture(GraphicsContext3D::TEXTURE_2D, 0); 494dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 4952bde8e466a4451c7319e3a072d118917957d6554Steve Block if (m_attrs.depth) { 4962bde8e466a4451c7319e3a072d118917957d6554Steve Block // Create depth and stencil buffers. 4972bde8e466a4451c7319e3a072d118917957d6554Steve Block bindRenderbuffer(GraphicsContext3D::RENDERBUFFER, m_depthBuffer); 498dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#if defined(QT_OPENGL_ES_2) 4992bde8e466a4451c7319e3a072d118917957d6554Steve Block renderbufferStorage(GraphicsContext3D::RENDERBUFFER, GraphicsContext3D::DEPTH_COMPONENT16, width, height); 500dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#else 5012bde8e466a4451c7319e3a072d118917957d6554Steve Block if (m_attrs.stencil) 5022bde8e466a4451c7319e3a072d118917957d6554Steve Block renderbufferStorage(GraphicsContext3D::RENDERBUFFER, GL_DEPTH24_STENCIL8, width, height); 5032bde8e466a4451c7319e3a072d118917957d6554Steve Block else 5042bde8e466a4451c7319e3a072d118917957d6554Steve Block renderbufferStorage(GraphicsContext3D::RENDERBUFFER, GraphicsContext3D::DEPTH_COMPONENT, width, height); 505dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#endif 5062bde8e466a4451c7319e3a072d118917957d6554Steve Block bindRenderbuffer(GraphicsContext3D::RENDERBUFFER, 0); 5072bde8e466a4451c7319e3a072d118917957d6554Steve Block } 508dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 5092bde8e466a4451c7319e3a072d118917957d6554Steve Block // Construct canvas FBO. 5102bde8e466a4451c7319e3a072d118917957d6554Steve Block bindFramebuffer(GraphicsContext3D::FRAMEBUFFER, m_canvasFbo); 511dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block framebufferTexture2D(GraphicsContext3D::FRAMEBUFFER, GraphicsContext3D::COLOR_ATTACHMENT0, GraphicsContext3D::TEXTURE_2D, m_texture, 0); 5122bde8e466a4451c7319e3a072d118917957d6554Steve Block if (m_attrs.depth) 5132bde8e466a4451c7319e3a072d118917957d6554Steve Block framebufferRenderbuffer(GraphicsContext3D::FRAMEBUFFER, GraphicsContext3D::DEPTH_ATTACHMENT, GraphicsContext3D::RENDERBUFFER, m_depthBuffer); 5142bde8e466a4451c7319e3a072d118917957d6554Steve Block#if !defined(QT_OPENGL_ES_2) 5152bde8e466a4451c7319e3a072d118917957d6554Steve Block if (m_attrs.stencil) 5162bde8e466a4451c7319e3a072d118917957d6554Steve Block framebufferRenderbuffer(GraphicsContext3D::FRAMEBUFFER, GraphicsContext3D::STENCIL_ATTACHMENT, GraphicsContext3D::RENDERBUFFER, m_depthBuffer); 5172bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif 518dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 5192bde8e466a4451c7319e3a072d118917957d6554Steve Block GLenum status = checkFramebufferStatus(GraphicsContext3D::FRAMEBUFFER); 5202bde8e466a4451c7319e3a072d118917957d6554Steve Block if (status != GraphicsContext3D::FRAMEBUFFER_COMPLETE) { 5212bde8e466a4451c7319e3a072d118917957d6554Steve Block LOG_ERROR("GraphicsContext3D: Canvas FBO initialization failed."); 5222bde8e466a4451c7319e3a072d118917957d6554Steve Block return; 523dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 524dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 5252bde8e466a4451c7319e3a072d118917957d6554Steve Block int clearFlags = GraphicsContext3D::COLOR_BUFFER_BIT; 5262bde8e466a4451c7319e3a072d118917957d6554Steve Block if (m_attrs.depth) 5272bde8e466a4451c7319e3a072d118917957d6554Steve Block clearFlags |= GraphicsContext3D::DEPTH_BUFFER_BIT; 5282bde8e466a4451c7319e3a072d118917957d6554Steve Block if (m_attrs.stencil) 5292bde8e466a4451c7319e3a072d118917957d6554Steve Block clearFlags |= GraphicsContext3D::STENCIL_BUFFER_BIT; 5302bde8e466a4451c7319e3a072d118917957d6554Steve Block 5312bde8e466a4451c7319e3a072d118917957d6554Steve Block glClear(clearFlags); 5322bde8e466a4451c7319e3a072d118917957d6554Steve Block glFlush(); 533dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 534dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 5352bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid GraphicsContext3DInternal::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) 536dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 5372bde8e466a4451c7319e3a072d118917957d6554Steve Block Q_UNUSED(widget); 538dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 5392bde8e466a4451c7319e3a072d118917957d6554Steve Block QRectF rect = option ? option->rect : boundingRect(); 540dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 5412bde8e466a4451c7319e3a072d118917957d6554Steve Block // Use direct texture mapping if WebGL canvas has a shared OpenGL context 5422bde8e466a4451c7319e3a072d118917957d6554Steve Block // with browsers OpenGL context. 5432bde8e466a4451c7319e3a072d118917957d6554Steve Block QGLWidget* viewportGLWidget = getViewportGLWidget(); 5442bde8e466a4451c7319e3a072d118917957d6554Steve Block if (viewportGLWidget && viewportGLWidget == m_viewportGLWidget && viewportGLWidget == painter->device()) { 5452bde8e466a4451c7319e3a072d118917957d6554Steve Block viewportGLWidget->drawTexture(rect, m_texture); 5462bde8e466a4451c7319e3a072d118917957d6554Steve Block return; 5472bde8e466a4451c7319e3a072d118917957d6554Steve Block } 5482bde8e466a4451c7319e3a072d118917957d6554Steve Block 5492bde8e466a4451c7319e3a072d118917957d6554Steve Block // Alternatively read pixels to a memory buffer. 5502bde8e466a4451c7319e3a072d118917957d6554Steve Block QImage offscreenImage(rect.width(), rect.height(), QImage::Format_ARGB32); 5512bde8e466a4451c7319e3a072d118917957d6554Steve Block quint32* imagePixels = reinterpret_cast<quint32*>(offscreenImage.bits()); 5522bde8e466a4451c7319e3a072d118917957d6554Steve Block 5532bde8e466a4451c7319e3a072d118917957d6554Steve Block m_glWidget->makeCurrent(); 5542bde8e466a4451c7319e3a072d118917957d6554Steve Block bindFramebuffer(GraphicsContext3D::FRAMEBUFFER, m_canvasFbo); 5552bde8e466a4451c7319e3a072d118917957d6554Steve Block glReadPixels(/* x */ 0, /* y */ 0, rect.width(), rect.height(), GraphicsContext3D::RGBA, GraphicsContext3D::UNSIGNED_BYTE, imagePixels); 5562bde8e466a4451c7319e3a072d118917957d6554Steve Block 5572bde8e466a4451c7319e3a072d118917957d6554Steve Block bindFramebuffer(GraphicsContext3D::FRAMEBUFFER, m_currentFbo); 5582bde8e466a4451c7319e3a072d118917957d6554Steve Block 5592bde8e466a4451c7319e3a072d118917957d6554Steve Block // OpenGL gives us ABGR on 32 bits, and with the origin at the bottom left 5602bde8e466a4451c7319e3a072d118917957d6554Steve Block // We need RGB32 or ARGB32_PM, with the origin at the top left. 5612bde8e466a4451c7319e3a072d118917957d6554Steve Block quint32* pixelsSrc = imagePixels; 5622bde8e466a4451c7319e3a072d118917957d6554Steve Block const int height = static_cast<int>(rect.height()); 5632bde8e466a4451c7319e3a072d118917957d6554Steve Block const int width = static_cast<int>(rect.width()); 5642bde8e466a4451c7319e3a072d118917957d6554Steve Block const int halfHeight = height / 2; 5652bde8e466a4451c7319e3a072d118917957d6554Steve Block for (int row = 0; row < halfHeight; ++row) { 5662bde8e466a4451c7319e3a072d118917957d6554Steve Block const int targetIdx = (height - 1 - row) * width; 5672bde8e466a4451c7319e3a072d118917957d6554Steve Block quint32* pixelsDst = imagePixels + targetIdx; 5682bde8e466a4451c7319e3a072d118917957d6554Steve Block for (int column = 0; column < width; ++column) { 5692bde8e466a4451c7319e3a072d118917957d6554Steve Block quint32 tempPixel = *pixelsSrc; 5702bde8e466a4451c7319e3a072d118917957d6554Steve Block *pixelsSrc = swapBgrToRgb(*pixelsDst); 5712bde8e466a4451c7319e3a072d118917957d6554Steve Block *pixelsDst = swapBgrToRgb(tempPixel); 5722bde8e466a4451c7319e3a072d118917957d6554Steve Block ++pixelsSrc; 5732bde8e466a4451c7319e3a072d118917957d6554Steve Block ++pixelsDst; 5742bde8e466a4451c7319e3a072d118917957d6554Steve Block } 5752bde8e466a4451c7319e3a072d118917957d6554Steve Block } 5762bde8e466a4451c7319e3a072d118917957d6554Steve Block if (static_cast<int>(height) % 2) { 5772bde8e466a4451c7319e3a072d118917957d6554Steve Block for (int column = 0; column < width; ++column) { 5782bde8e466a4451c7319e3a072d118917957d6554Steve Block *pixelsSrc = swapBgrToRgb(*pixelsSrc); 5792bde8e466a4451c7319e3a072d118917957d6554Steve Block ++pixelsSrc; 5802bde8e466a4451c7319e3a072d118917957d6554Steve Block } 5812bde8e466a4451c7319e3a072d118917957d6554Steve Block } 5822bde8e466a4451c7319e3a072d118917957d6554Steve Block painter->drawImage(/* x */ 0, /* y */ 0, offscreenImage); 5832bde8e466a4451c7319e3a072d118917957d6554Steve Block} 5842bde8e466a4451c7319e3a072d118917957d6554Steve Block 5852bde8e466a4451c7319e3a072d118917957d6554Steve BlockQRectF GraphicsContext3DInternal::boundingRect() const 5862bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 5872bde8e466a4451c7319e3a072d118917957d6554Steve Block return m_boundingRect; 588dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 589dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 590dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockvoid* GraphicsContext3DInternal::getProcAddress(const String& proc) 591dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 592dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block String ext[3] = { "", "ARB", "EXT" }; 593dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 594dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block for (int i = 0; i < 3; i++) { 595dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block String nameWithExt = proc + ext[i]; 596dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 5972daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch void* addr = m_glWidget->context()->getProcAddress(QString(nameWithExt)); 598dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (addr) 599dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return addr; 600dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 601dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 602dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block LOG_ERROR("GraphicsContext3D: Did not find GL function %s", proc.utf8().data()); 6032bde8e466a4451c7319e3a072d118917957d6554Steve Block m_valid = false; 604dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return 0; 605dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 606dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 60781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen MurdochPassRefPtr<GraphicsContext3D> GraphicsContext3D::create(GraphicsContext3D::Attributes attrs, HostWindow* hostWindow, GraphicsContext3D::RenderStyle renderStyle) 608dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 60968513a70bcd92384395513322f1b801e7bf9c729Steve Block // This implementation doesn't currently support rendering directly to the HostWindow. 61068513a70bcd92384395513322f1b801e7bf9c729Steve Block if (renderStyle == RenderDirectlyToHostWindow) 61168513a70bcd92384395513322f1b801e7bf9c729Steve Block return 0; 61281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch RefPtr<GraphicsContext3D> context = adoptRef(new GraphicsContext3D(attrs, hostWindow, false)); 613dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return context->m_internal ? context.release() : 0; 614dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 615dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 61668513a70bcd92384395513322f1b801e7bf9c729Steve BlockGraphicsContext3D::GraphicsContext3D(GraphicsContext3D::Attributes attrs, HostWindow* hostWindow, bool) 617dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block : m_internal(new GraphicsContext3DInternal(attrs, hostWindow)) 618dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 6192bde8e466a4451c7319e3a072d118917957d6554Steve Block if (!m_internal->isValid()) 620dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal = 0; 621dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 622dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 623dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockGraphicsContext3D::~GraphicsContext3D() 624dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 625dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 626dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 627dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockPlatformGraphicsContext3D GraphicsContext3D::platformGraphicsContext3D() 628dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 629dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return m_internal->m_glWidget; 630dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 631dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 632dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockPlatform3DObject GraphicsContext3D::platformTexture() const 633dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 634dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return m_internal->m_texture; 635dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 636dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 6372bde8e466a4451c7319e3a072d118917957d6554Steve BlockPlatformLayer* GraphicsContext3D::platformLayer() const 6382bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 6392bde8e466a4451c7319e3a072d118917957d6554Steve Block return m_internal.get(); 6402bde8e466a4451c7319e3a072d118917957d6554Steve Block} 6412bde8e466a4451c7319e3a072d118917957d6554Steve Block 642dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockvoid GraphicsContext3D::makeContextCurrent() 643dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 644dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 645dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 646dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 647dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdochvoid GraphicsContext3D::paintRenderingResultsToCanvas(CanvasRenderingContext* context) 648967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch{ 649dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 650dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block HTMLCanvasElement* canvas = context->canvas(); 651dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ImageBuffer* imageBuffer = canvas->buffer(); 65206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen QPainter* painter = imageBuffer->context()->platformContext(); 6532bde8e466a4451c7319e3a072d118917957d6554Steve Block m_internal->paint(painter, 0, 0); 654dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 655dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 6562bde8e466a4451c7319e3a072d118917957d6554Steve BlockPassRefPtr<ImageData> GraphicsContext3D::paintRenderingResultsToImageData() 65721939df44de1705786c545cd1bf519d47250322dBen Murdoch{ 6582bde8e466a4451c7319e3a072d118917957d6554Steve Block // FIXME: This needs to be implemented for proper non-premultiplied-alpha 6592bde8e466a4451c7319e3a072d118917957d6554Steve Block // support. 6602bde8e466a4451c7319e3a072d118917957d6554Steve Block return 0; 66121939df44de1705786c545cd1bf519d47250322dBen Murdoch} 66221939df44de1705786c545cd1bf519d47250322dBen Murdoch 663dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockvoid GraphicsContext3D::reshape(int width, int height) 664dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 6652daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if ((width == m_currentWidth && height == m_currentHeight) || (!m_internal)) 666dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return; 6672bde8e466a4451c7319e3a072d118917957d6554Steve Block 668dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_currentWidth = width; 669dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_currentHeight = height; 670dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 6712bde8e466a4451c7319e3a072d118917957d6554Steve Block m_internal->reshape(width, height); 672dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 673dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 674cad810f21b803229eb11403f9209855525a25d57Steve BlockIntSize GraphicsContext3D::getInternalFramebufferSize() 675cad810f21b803229eb11403f9209855525a25d57Steve Block{ 676cad810f21b803229eb11403f9209855525a25d57Steve Block return IntSize(m_currentWidth, m_currentHeight); 677cad810f21b803229eb11403f9209855525a25d57Steve Block} 678cad810f21b803229eb11403f9209855525a25d57Steve Block 679cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::activeTexture(GC3Denum texture) 680dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 681dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 682dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->activeTexture(texture); 683dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 684dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 685e8b154fd68f9b33be40a3590e58347f353835f5cSteve Blockvoid GraphicsContext3D::attachShader(Platform3DObject program, Platform3DObject shader) 686dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 687dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ASSERT(program); 688dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ASSERT(shader); 689dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 690cad810f21b803229eb11403f9209855525a25d57Steve Block m_internal->attachShader(program, shader); 691dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 692dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 693cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::getAttachedShaders(Platform3DObject program, GC3Dsizei maxCount, GC3Dsizei* count, Platform3DObject* shaders) 694e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block{ 695e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block if (!program) { 696e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block synthesizeGLError(INVALID_VALUE); 697e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block return; 698e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block } 699e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 700e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block m_internal->m_glWidget->makeCurrent(); 701cad810f21b803229eb11403f9209855525a25d57Steve Block getAttachedShaders(program, maxCount, count, shaders); 702e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block} 703e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 704cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::bindAttribLocation(Platform3DObject program, GC3Duint index, const String& name) 705dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 706dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ASSERT(program); 707dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 708cad810f21b803229eb11403f9209855525a25d57Steve Block m_internal->bindAttribLocation(program, index, name.utf8().data()); 709dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 710dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 711cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::bindBuffer(GC3Denum target, Platform3DObject buffer) 712dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 713dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 714cad810f21b803229eb11403f9209855525a25d57Steve Block m_internal->bindBuffer(target, buffer); 715dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 716dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 717cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::bindFramebuffer(GC3Denum target, Platform3DObject buffer) 718dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 719dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 7202bde8e466a4451c7319e3a072d118917957d6554Steve Block m_internal->m_currentFbo = buffer ? buffer : m_internal->m_canvasFbo; 721dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->bindFramebuffer(target, m_internal->m_currentFbo); 722dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 723dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 724cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::bindRenderbuffer(GC3Denum target, Platform3DObject renderbuffer) 725dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 726dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 727cad810f21b803229eb11403f9209855525a25d57Steve Block m_internal->bindRenderbuffer(target, renderbuffer); 728dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 729dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 730cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::bindTexture(GC3Denum target, Platform3DObject texture) 731dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 732dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 733cad810f21b803229eb11403f9209855525a25d57Steve Block glBindTexture(target, texture); 734dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 735dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 736cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::blendColor(GC3Dclampf red, GC3Dclampf green, GC3Dclampf blue, GC3Dclampf alpha) 737dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 738dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 739cad810f21b803229eb11403f9209855525a25d57Steve Block m_internal->blendColor(red, green, blue, alpha); 740dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 741dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 742cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::blendEquation(GC3Denum mode) 743dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 744dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 745dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->blendEquation(mode); 746dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 747dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 748cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::blendEquationSeparate(GC3Denum modeRGB, GC3Denum modeAlpha) 749dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 750dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 751dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->blendEquationSeparate(modeRGB, modeAlpha); 752dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 753dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 754cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::blendFunc(GC3Denum sfactor, GC3Denum dfactor) 755dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 756dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 757dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glBlendFunc(sfactor, dfactor); 758dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 759dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 760cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::blendFuncSeparate(GC3Denum srcRGB, GC3Denum dstRGB, GC3Denum srcAlpha, GC3Denum dstAlpha) 761dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 762dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 763dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->blendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha); 764dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 765dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 766cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::bufferData(GC3Denum target, GC3Dsizeiptr size, GC3Denum usage) 767dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 768dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 769dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->bufferData(target, size, /* data */ 0, usage); 770dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 771dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 772cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::bufferData(GC3Denum target, GC3Dsizeiptr size, const void* data, GC3Denum usage) 773dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 774dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 775e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block m_internal->bufferData(target, size, data, usage); 776dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 777dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 778cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::bufferSubData(GC3Denum target, GC3Dintptr offset, GC3Dsizeiptr size, const void* data) 779dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 780dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 781e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block m_internal->bufferSubData(target, offset, size, data); 782dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 783dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 784cad810f21b803229eb11403f9209855525a25d57Steve BlockGC3Denum GraphicsContext3D::checkFramebufferStatus(GC3Denum target) 785dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 786dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 787dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return m_internal->checkFramebufferStatus(target); 788dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 789dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 790cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::clearColor(GC3Dclampf r, GC3Dclampf g, GC3Dclampf b, GC3Dclampf a) 791dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 792dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 793cad810f21b803229eb11403f9209855525a25d57Steve Block glClearColor(r, g, b, a); 794dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 795dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 796cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::clear(GC3Dbitfield mask) 797dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 798dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 799dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glClear(mask); 800dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 801dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 802cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::clearDepth(GC3Dclampf depth) 803dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 804dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 805dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#if defined(QT_OPENGL_ES_2) 806dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glClearDepthf(depth); 807dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#else 808dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glClearDepth(depth); 809dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#endif 810dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 811dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 812cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::clearStencil(GC3Dint s) 813dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 814dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 815dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glClearStencil(s); 816dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 817dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 818cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::colorMask(GC3Dboolean red, GC3Dboolean green, GC3Dboolean blue, GC3Dboolean alpha) 819dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 820dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 821dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glColorMask(red, green, blue, alpha); 822dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 823dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 824e8b154fd68f9b33be40a3590e58347f353835f5cSteve Blockvoid GraphicsContext3D::compileShader(Platform3DObject shader) 825dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 826dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ASSERT(shader); 827dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 828cad810f21b803229eb11403f9209855525a25d57Steve Block m_internal->compileShader(shader); 829dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 830dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 831cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::copyTexImage2D(GC3Denum target, GC3Dint level, GC3Denum internalformat, GC3Dint x, GC3Dint y, GC3Dsizei width, GC3Dsizei height, GC3Dint border) 832dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 833dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 834dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glCopyTexImage2D(target, level, internalformat, x, y, width, height, border); 835dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 836dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 837cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::copyTexSubImage2D(GC3Denum target, GC3Dint level, GC3Dint xoffset, GC3Dint yoffset, GC3Dint x, GC3Dint y, GC3Dsizei width, GC3Dsizei height) 838dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 839dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 840dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glCopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height); 841dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 842dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 843cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::cullFace(GC3Denum mode) 844dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 845dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 846dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glCullFace(mode); 847dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 848dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 849cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::depthFunc(GC3Denum func) 850dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 851dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 852dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glDepthFunc(func); 853dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 854dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 855cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::depthMask(GC3Dboolean flag) 856dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 857dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 858dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glDepthMask(flag); 859dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 860dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 861cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::depthRange(GC3Dclampf zNear, GC3Dclampf zFar) 862dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 863dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 864dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#if defined(QT_OPENGL_ES_2) 865dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glDepthRangef(zNear, zFar); 866dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#else 867dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glDepthRange(zNear, zFar); 868dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#endif 869dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 870dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 871e8b154fd68f9b33be40a3590e58347f353835f5cSteve Blockvoid GraphicsContext3D::detachShader(Platform3DObject program, Platform3DObject shader) 872dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 873dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ASSERT(program); 874dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ASSERT(shader); 875dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 876cad810f21b803229eb11403f9209855525a25d57Steve Block m_internal->detachShader(program, shader); 877dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 878dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 879cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::disable(GC3Denum cap) 880dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 881dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 882dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glDisable(cap); 883dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 884dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 885cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::disableVertexAttribArray(GC3Duint index) 886dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 887dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 888dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->disableVertexAttribArray(index); 889dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 890dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 891cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::drawArrays(GC3Denum mode, GC3Dint first, GC3Dsizei count) 892dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 893dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 894dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glDrawArrays(mode, first, count); 895dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 896dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 897cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::drawElements(GC3Denum mode, GC3Dsizei count, GC3Denum type, GC3Dintptr offset) 898dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 899dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 900cad810f21b803229eb11403f9209855525a25d57Steve Block glDrawElements(mode, count, type, reinterpret_cast<GLvoid*>(static_cast<intptr_t>(offset))); 901dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 902dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 903cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::enable(GC3Denum cap) 904dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 905dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 906dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glEnable(cap); 907dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 908dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 909cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::enableVertexAttribArray(GC3Duint index) 910dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 911dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 912dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->enableVertexAttribArray(index); 913dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 914dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 915dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockvoid GraphicsContext3D::finish() 916dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 917dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 918dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glFinish(); 919dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 920dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 921dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockvoid GraphicsContext3D::flush() 922dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 923dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 924dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glFlush(); 925dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 926dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 927cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::framebufferRenderbuffer(GC3Denum target, GC3Denum attachment, GC3Denum renderbuffertarget, Platform3DObject buffer) 928dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 929dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 930cad810f21b803229eb11403f9209855525a25d57Steve Block m_internal->framebufferRenderbuffer(target, attachment, renderbuffertarget, buffer); 931dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 932dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 933cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::framebufferTexture2D(GC3Denum target, GC3Denum attachment, GC3Denum textarget, Platform3DObject texture, GC3Dint level) 934dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 935dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 936cad810f21b803229eb11403f9209855525a25d57Steve Block m_internal->framebufferTexture2D(target, attachment, textarget, texture, level); 937dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 938dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 939cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::frontFace(GC3Denum mode) 940dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 941dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 942dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glFrontFace(mode); 943dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 944dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 945cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::generateMipmap(GC3Denum target) 946dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 947dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 948dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->generateMipmap(target); 949dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 950dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 951cad810f21b803229eb11403f9209855525a25d57Steve Blockbool GraphicsContext3D::getActiveAttrib(Platform3DObject program, GC3Duint index, ActiveInfo& info) 952dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 953dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch if (!program) { 954dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block synthesizeGLError(INVALID_VALUE); 955dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return false; 956dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 957dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 958dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 959dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 960cad810f21b803229eb11403f9209855525a25d57Steve Block GLint maxLength = 0; 961cad810f21b803229eb11403f9209855525a25d57Steve Block m_internal->getProgramiv(program, GraphicsContext3D::ACTIVE_ATTRIBUTE_MAX_LENGTH, &maxLength); 962dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 963dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block GLchar* name = (GLchar*) fastMalloc(maxLength); 964cad810f21b803229eb11403f9209855525a25d57Steve Block GLsizei nameLength = 0; 965cad810f21b803229eb11403f9209855525a25d57Steve Block GLint size = 0; 966cad810f21b803229eb11403f9209855525a25d57Steve Block GLenum type = 0; 967dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 968cad810f21b803229eb11403f9209855525a25d57Steve Block m_internal->getActiveAttrib(program, index, maxLength, &nameLength, &size, &type, name); 969dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 970dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!nameLength) { 971dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block fastFree(name); 972dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return false; 973dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 974dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 975dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block info.name = String(name, nameLength); 976dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block info.type = type; 977dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block info.size = size; 978dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 979dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block fastFree(name); 980dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return true; 981dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 982dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 983cad810f21b803229eb11403f9209855525a25d57Steve Blockbool GraphicsContext3D::getActiveUniform(Platform3DObject program, GC3Duint index, ActiveInfo& info) 984dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 985dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch if (!program) { 986dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block synthesizeGLError(INVALID_VALUE); 987dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return false; 988dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 989dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 990dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 991dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 992cad810f21b803229eb11403f9209855525a25d57Steve Block GLint maxLength = 0; 993dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch m_internal->getProgramiv(static_cast<GLuint>(program), GraphicsContext3D::ACTIVE_UNIFORM_MAX_LENGTH, &maxLength); 994dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 995dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block GLchar* name = (GLchar*) fastMalloc(maxLength); 996cad810f21b803229eb11403f9209855525a25d57Steve Block GLsizei nameLength = 0; 997cad810f21b803229eb11403f9209855525a25d57Steve Block GLint size = 0; 998cad810f21b803229eb11403f9209855525a25d57Steve Block GLenum type = 0; 999dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1000dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch m_internal->getActiveUniform(static_cast<GLuint>(program), index, maxLength, &nameLength, &size, &type, name); 1001dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1002dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!nameLength) { 1003dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block fastFree(name); 1004dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return false; 1005dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 1006dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1007dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block info.name = String(name, nameLength); 1008dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block info.type = type; 1009dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block info.size = size; 1010dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1011dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block fastFree(name); 1012dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return true; 1013dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1014dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1015e8b154fd68f9b33be40a3590e58347f353835f5cSteve Blockint GraphicsContext3D::getAttribLocation(Platform3DObject program, const String& name) 1016dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1017dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!program) 1018dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return -1; 1019dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1020dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1021cad810f21b803229eb11403f9209855525a25d57Steve Block return m_internal->getAttribLocation(program, name.utf8().data()); 1022dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1023dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1024dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockGraphicsContext3D::Attributes GraphicsContext3D::getContextAttributes() 1025dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1026dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return m_internal->m_attrs; 1027dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1028dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1029cad810f21b803229eb11403f9209855525a25d57Steve BlockGC3Denum GraphicsContext3D::getError() 1030dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1031dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (m_internal->m_syntheticErrors.size() > 0) { 1032cad810f21b803229eb11403f9209855525a25d57Steve Block ListHashSet<GC3Denum>::iterator iter = m_internal->m_syntheticErrors.begin(); 1033cad810f21b803229eb11403f9209855525a25d57Steve Block GC3Denum err = *iter; 1034dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_syntheticErrors.remove(iter); 1035dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return err; 1036dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 1037dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1038dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1039dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return glGetError(); 1040dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1041dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1042cad810f21b803229eb11403f9209855525a25d57Steve BlockString GraphicsContext3D::getString(GC3Denum name) 1043dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1044dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1045dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return String((const char*) glGetString(name)); 1046dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1047dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1048cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::hint(GC3Denum target, GC3Denum mode) 1049dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1050dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1051dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glHint(target, mode); 1052dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1053dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1054cad810f21b803229eb11403f9209855525a25d57Steve BlockGC3Dboolean GraphicsContext3D::isBuffer(Platform3DObject buffer) 1055dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1056dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!buffer) 1057cad810f21b803229eb11403f9209855525a25d57Steve Block return GL_FALSE; 1058dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1059dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1060cad810f21b803229eb11403f9209855525a25d57Steve Block return m_internal->isBuffer(buffer); 1061dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1062dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1063cad810f21b803229eb11403f9209855525a25d57Steve BlockGC3Dboolean GraphicsContext3D::isEnabled(GC3Denum cap) 1064dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1065dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1066dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return glIsEnabled(cap); 1067dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1068dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1069cad810f21b803229eb11403f9209855525a25d57Steve BlockGC3Dboolean GraphicsContext3D::isFramebuffer(Platform3DObject framebuffer) 1070dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1071dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!framebuffer) 1072cad810f21b803229eb11403f9209855525a25d57Steve Block return GL_FALSE; 1073dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1074dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1075cad810f21b803229eb11403f9209855525a25d57Steve Block return m_internal->isFramebuffer(framebuffer); 1076dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1077dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1078cad810f21b803229eb11403f9209855525a25d57Steve BlockGC3Dboolean GraphicsContext3D::isProgram(Platform3DObject program) 1079dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1080dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!program) 1081cad810f21b803229eb11403f9209855525a25d57Steve Block return GL_FALSE; 1082dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1083dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1084cad810f21b803229eb11403f9209855525a25d57Steve Block return m_internal->isProgram(program); 1085dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1086dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1087cad810f21b803229eb11403f9209855525a25d57Steve BlockGC3Dboolean GraphicsContext3D::isRenderbuffer(Platform3DObject renderbuffer) 1088dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1089dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!renderbuffer) 1090cad810f21b803229eb11403f9209855525a25d57Steve Block return GL_FALSE; 1091dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1092dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1093cad810f21b803229eb11403f9209855525a25d57Steve Block return m_internal->isRenderbuffer(renderbuffer); 1094dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1095dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1096cad810f21b803229eb11403f9209855525a25d57Steve BlockGC3Dboolean GraphicsContext3D::isShader(Platform3DObject shader) 1097dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1098dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!shader) 1099cad810f21b803229eb11403f9209855525a25d57Steve Block return GL_FALSE; 1100dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1101dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1102cad810f21b803229eb11403f9209855525a25d57Steve Block return m_internal->isShader(shader); 1103dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1104dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1105cad810f21b803229eb11403f9209855525a25d57Steve BlockGC3Dboolean GraphicsContext3D::isTexture(Platform3DObject texture) 1106dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1107dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!texture) 1108cad810f21b803229eb11403f9209855525a25d57Steve Block return GL_FALSE; 1109dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1110dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1111cad810f21b803229eb11403f9209855525a25d57Steve Block return glIsTexture(texture); 1112dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1113dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 111481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochvoid GraphicsContext3D::lineWidth(GC3Dfloat width) 1115dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1116dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1117dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glLineWidth(static_cast<float>(width)); 1118dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1119dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1120e8b154fd68f9b33be40a3590e58347f353835f5cSteve Blockvoid GraphicsContext3D::linkProgram(Platform3DObject program) 1121dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1122dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ASSERT(program); 1123dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1124cad810f21b803229eb11403f9209855525a25d57Steve Block m_internal->linkProgram(program); 1125dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1126dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1127cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::pixelStorei(GC3Denum paramName, GC3Dint param) 1128dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1129dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1130dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glPixelStorei(paramName, param); 1131dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1132dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1133cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::polygonOffset(GC3Dfloat factor, GC3Dfloat units) 1134dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1135dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1136cad810f21b803229eb11403f9209855525a25d57Steve Block glPolygonOffset(factor, units); 1137dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1138dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1139cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::readPixels(GC3Dint x, GC3Dint y, GC3Dsizei width, GC3Dsizei height, GC3Denum format, GC3Denum type, void* data) 1140dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1141dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1142dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1143dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (type != GraphicsContext3D::UNSIGNED_BYTE || format != GraphicsContext3D::RGBA) 1144dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return; 1145dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1146cad810f21b803229eb11403f9209855525a25d57Steve Block glReadPixels(x, y, width, height, format, type, data); 1147dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1148dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1149dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockvoid GraphicsContext3D::releaseShaderCompiler() 1150dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1151dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1152dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block notImplemented(); 1153dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1154dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1155cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::renderbufferStorage(GC3Denum target, GC3Denum internalformat, GC3Dsizei width, GC3Dsizei height) 1156dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1157dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 11582bde8e466a4451c7319e3a072d118917957d6554Steve Block#if !defined(QT_OPENGL_ES_2) 11592bde8e466a4451c7319e3a072d118917957d6554Steve Block switch (internalformat) { 11602bde8e466a4451c7319e3a072d118917957d6554Steve Block case DEPTH_STENCIL: 11612bde8e466a4451c7319e3a072d118917957d6554Steve Block internalformat = GL_DEPTH24_STENCIL8; 11622bde8e466a4451c7319e3a072d118917957d6554Steve Block break; 11632bde8e466a4451c7319e3a072d118917957d6554Steve Block case DEPTH_COMPONENT16: 11642bde8e466a4451c7319e3a072d118917957d6554Steve Block internalformat = DEPTH_COMPONENT; 11652bde8e466a4451c7319e3a072d118917957d6554Steve Block break; 11662bde8e466a4451c7319e3a072d118917957d6554Steve Block case RGBA4: 11672bde8e466a4451c7319e3a072d118917957d6554Steve Block case RGB5_A1: 11682bde8e466a4451c7319e3a072d118917957d6554Steve Block internalformat = RGBA; 11692bde8e466a4451c7319e3a072d118917957d6554Steve Block break; 11702bde8e466a4451c7319e3a072d118917957d6554Steve Block case RGB565: 11712bde8e466a4451c7319e3a072d118917957d6554Steve Block internalformat = RGB; 11722bde8e466a4451c7319e3a072d118917957d6554Steve Block break; 11732bde8e466a4451c7319e3a072d118917957d6554Steve Block } 11742bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif 1175dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->renderbufferStorage(target, internalformat, width, height); 1176dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1177dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1178cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::sampleCoverage(GC3Dclampf value, GC3Dboolean invert) 1179dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1180dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1181cad810f21b803229eb11403f9209855525a25d57Steve Block m_internal->sampleCoverage(value, invert); 1182dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1183dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1184cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::scissor(GC3Dint x, GC3Dint y, GC3Dsizei width, GC3Dsizei height) 1185dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1186dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1187dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glScissor(x, y, width, height); 1188dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1189dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1190e8b154fd68f9b33be40a3590e58347f353835f5cSteve Blockvoid GraphicsContext3D::shaderSource(Platform3DObject shader, const String& source) 1191dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1192dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ASSERT(shader); 119306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 1194dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1195dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 119606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen String prefixedSource; 119706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 119806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen#if defined (QT_OPENGL_ES_2) 119906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen prefixedSource.append("precision mediump float;\n"); 120006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen#endif 120106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 120206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen prefixedSource.append(source); 120306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 120406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen CString sourceCS = prefixedSource.utf8(); 1205dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block const char* data = sourceCS.data(); 120606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen int length = prefixedSource.length(); 1207dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch m_internal->shaderSource((GLuint) shader, /* count */ 1, &data, &length); 1208dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1209dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1210cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::stencilFunc(GC3Denum func, GC3Dint ref, GC3Duint mask) 1211dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1212dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1213dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glStencilFunc(func, ref, mask); 1214dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1215dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1216cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::stencilFuncSeparate(GC3Denum face, GC3Denum func, GC3Dint ref, GC3Duint mask) 1217dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1218dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1219dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->stencilFuncSeparate(face, func, ref, mask); 1220dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1221dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1222cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::stencilMask(GC3Duint mask) 1223dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1224dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1225dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glStencilMask(mask); 1226dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1227dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1228cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::stencilMaskSeparate(GC3Denum face, GC3Duint mask) 1229dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1230dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1231dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->stencilMaskSeparate(face, mask); 1232dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1233dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1234cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::stencilOp(GC3Denum fail, GC3Denum zfail, GC3Denum zpass) 1235dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1236dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1237dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glStencilOp(fail, zfail, zpass); 1238dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1239dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1240cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::stencilOpSeparate(GC3Denum face, GC3Denum fail, GC3Denum zfail, GC3Denum zpass) 1241dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1242dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1243dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->stencilOpSeparate(face, fail, zfail, zpass); 1244dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1245dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1246cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::texParameterf(GC3Denum target, GC3Denum paramName, GC3Dfloat value) 1247dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1248dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1249cad810f21b803229eb11403f9209855525a25d57Steve Block glTexParameterf(target, paramName, value); 1250dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1251dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1252cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::texParameteri(GC3Denum target, GC3Denum paramName, GC3Dint value) 1253dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1254dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1255cad810f21b803229eb11403f9209855525a25d57Steve Block glTexParameteri(target, paramName, value); 1256dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1257dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1258cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::uniform1f(GC3Dint location, GC3Dfloat v0) 1259dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1260dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1261dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->uniform1f(location, v0); 1262dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1263dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1264cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::uniform1fv(GC3Dint location, GC3Dfloat* array, GC3Dsizei size) 1265dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1266dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1267dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->uniform1fv(location, size, array); 1268dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1269dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1270cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::uniform2f(GC3Dint location, GC3Dfloat v0, GC3Dfloat v1) 1271dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1272dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1273dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->uniform2f(location, v0, v1); 1274dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1275dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1276cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::uniform2fv(GC3Dint location, GC3Dfloat* array, GC3Dsizei size) 1277dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1278dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1279dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->uniform2fv(location, size, array); 1280dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1281dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1282cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::uniform3f(GC3Dint location, GC3Dfloat v0, GC3Dfloat v1, GC3Dfloat v2) 1283dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1284dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1285dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->uniform3f(location, v0, v1, v2); 1286dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1287dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1288cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::uniform3fv(GC3Dint location, GC3Dfloat* array, GC3Dsizei size) 1289dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1290dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1291dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->uniform3fv(location, size, array); 1292dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1293dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1294cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::uniform4f(GC3Dint location, GC3Dfloat v0, GC3Dfloat v1, GC3Dfloat v2, GC3Dfloat v3) 1295dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1296dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1297dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->uniform4f(location, v0, v1, v2, v3); 1298dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1299dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1300cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::uniform4fv(GC3Dint location, GC3Dfloat* array, GC3Dsizei size) 1301dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1302dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1303dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->uniform4fv(location, size, array); 1304dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1305dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1306cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::uniform1i(GC3Dint location, GC3Dint v0) 1307dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1308dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1309dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->uniform1i(location, v0); 1310dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1311dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1312cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::uniform1iv(GC3Dint location, GC3Dint* array, GC3Dsizei size) 1313dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1314dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1315dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->uniform1iv(location, size, array); 1316dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1317dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1318cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::uniform2i(GC3Dint location, GC3Dint v0, GC3Dint v1) 1319dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1320dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1321dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->uniform2i(location, v0, v1); 1322dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1323dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1324cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::uniform2iv(GC3Dint location, GC3Dint* array, GC3Dsizei size) 1325dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1326dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1327dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->uniform2iv(location, size, array); 1328dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1329dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1330cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::uniform3i(GC3Dint location, GC3Dint v0, GC3Dint v1, GC3Dint v2) 1331dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1332dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1333dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->uniform3i(location, v0, v1, v2); 1334dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1335dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1336cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::uniform3iv(GC3Dint location, GC3Dint* array, GC3Dsizei size) 1337dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1338dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1339dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->uniform3iv(location, size, array); 1340dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1341dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1342cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::uniform4i(GC3Dint location, GC3Dint v0, GC3Dint v1, GC3Dint v2, GC3Dint v3) 1343dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1344dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1345dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->uniform4i(location, v0, v1, v2, v3); 1346dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1347dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1348cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::uniform4iv(GC3Dint location, GC3Dint* array, GC3Dsizei size) 1349dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1350dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1351dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->uniform4iv(location, size, array); 1352dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1353dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1354cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::uniformMatrix2fv(GC3Dint location, GC3Dboolean transpose, GC3Dfloat* array, GC3Dsizei size) 1355dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1356dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1357dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->uniformMatrix2fv(location, size, transpose, array); 1358dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1359dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1360cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::uniformMatrix3fv(GC3Dint location, GC3Dboolean transpose, GC3Dfloat* array, GC3Dsizei size) 1361dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1362dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1363dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->uniformMatrix3fv(location, size, transpose, array); 1364dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1365dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1366cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::uniformMatrix4fv(GC3Dint location, GC3Dboolean transpose, GC3Dfloat* array, GC3Dsizei size) 1367dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1368dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1369dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->uniformMatrix4fv(location, size, transpose, array); 1370dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1371dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1372e8b154fd68f9b33be40a3590e58347f353835f5cSteve Blockvoid GraphicsContext3D::useProgram(Platform3DObject program) 1373dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1374dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ASSERT(program); 1375dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1376dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1377cad810f21b803229eb11403f9209855525a25d57Steve Block m_internal->useProgram(program); 1378dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1379dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1380e8b154fd68f9b33be40a3590e58347f353835f5cSteve Blockvoid GraphicsContext3D::validateProgram(Platform3DObject program) 1381dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1382dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ASSERT(program); 1383dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1384dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1385cad810f21b803229eb11403f9209855525a25d57Steve Block m_internal->validateProgram(program); 1386dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1387dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1388cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::vertexAttrib1f(GC3Duint index, GC3Dfloat v0) 1389dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1390dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1391cad810f21b803229eb11403f9209855525a25d57Steve Block m_internal->vertexAttrib1f(index, v0); 1392dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1393dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1394cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::vertexAttrib1fv(GC3Duint index, GC3Dfloat* array) 1395dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1396dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1397cad810f21b803229eb11403f9209855525a25d57Steve Block m_internal->vertexAttrib1fv(index, array); 1398dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1399dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1400cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::vertexAttrib2f(GC3Duint index, GC3Dfloat v0, GC3Dfloat v1) 1401dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1402dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1403cad810f21b803229eb11403f9209855525a25d57Steve Block m_internal->vertexAttrib2f(index, v0, v1); 1404dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1405dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1406cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::vertexAttrib2fv(GC3Duint index, GC3Dfloat* array) 1407dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1408dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1409cad810f21b803229eb11403f9209855525a25d57Steve Block m_internal->vertexAttrib2fv(index, array); 1410dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1411dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1412cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::vertexAttrib3f(GC3Duint index, GC3Dfloat v0, GC3Dfloat v1, GC3Dfloat v2) 1413dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1414dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1415cad810f21b803229eb11403f9209855525a25d57Steve Block m_internal->vertexAttrib3f(index, v0, v1, v2); 1416dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1417dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1418cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::vertexAttrib3fv(GC3Duint index, GC3Dfloat* array) 1419dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1420dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1421cad810f21b803229eb11403f9209855525a25d57Steve Block m_internal->vertexAttrib3fv(index, array); 1422dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1423dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1424cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::vertexAttrib4f(GC3Duint index, GC3Dfloat v0, GC3Dfloat v1, GC3Dfloat v2, GC3Dfloat v3) 1425dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1426dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1427cad810f21b803229eb11403f9209855525a25d57Steve Block m_internal->vertexAttrib4f(index, v0, v1, v2, v3); 1428dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1429dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1430cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::vertexAttrib4fv(GC3Duint index, GC3Dfloat* array) 1431dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1432dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1433cad810f21b803229eb11403f9209855525a25d57Steve Block m_internal->vertexAttrib4fv(index, array); 1434dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1435dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1436cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::vertexAttribPointer(GC3Duint index, GC3Dint size, GC3Denum type, GC3Dboolean normalized, GC3Dsizei stride, GC3Dintptr offset) 1437dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1438dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1439cad810f21b803229eb11403f9209855525a25d57Steve Block m_internal->vertexAttribPointer(index, size, type, normalized, stride, reinterpret_cast<GLvoid*>(static_cast<intptr_t>(offset))); 1440dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1441dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1442cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::viewport(GC3Dint x, GC3Dint y, GC3Dsizei width, GC3Dsizei height) 1443dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1444dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1445cad810f21b803229eb11403f9209855525a25d57Steve Block glViewport(x, y, width, height); 1446dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1447dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1448cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::getBooleanv(GC3Denum paramName, GC3Dboolean* value) 1449dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1450dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1451dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glGetBooleanv(paramName, value); 1452dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1453dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1454cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::getBufferParameteriv(GC3Denum target, GC3Denum paramName, GC3Dint* value) 1455dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1456dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1457dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->getBufferParameteriv(target, paramName, value); 1458dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1459dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1460cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::getFloatv(GC3Denum paramName, GC3Dfloat* value) 1461dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1462dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1463dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glGetFloatv(paramName, value); 1464dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1465dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1466cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::getFramebufferAttachmentParameteriv(GC3Denum target, GC3Denum attachment, GC3Denum paramName, GC3Dint* value) 1467dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1468dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1469dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->getFramebufferAttachmentParameteriv(target, attachment, paramName, value); 1470dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1471dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1472cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::getIntegerv(GC3Denum paramName, GC3Dint* value) 1473dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1474dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1475dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glGetIntegerv(paramName, value); 1476dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1477dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1478cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::getProgramiv(Platform3DObject program, GC3Denum paramName, GC3Dint* value) 1479dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1480dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1481cad810f21b803229eb11403f9209855525a25d57Steve Block m_internal->getProgramiv(program, paramName, value); 1482dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1483dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1484e8b154fd68f9b33be40a3590e58347f353835f5cSteve BlockString GraphicsContext3D::getProgramInfoLog(Platform3DObject program) 1485dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1486dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1487dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1488cad810f21b803229eb11403f9209855525a25d57Steve Block GLint length = 0; 1489cad810f21b803229eb11403f9209855525a25d57Steve Block m_internal->getProgramiv(program, GraphicsContext3D::INFO_LOG_LENGTH, &length); 1490dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1491cad810f21b803229eb11403f9209855525a25d57Steve Block GLsizei size = 0; 1492dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1493dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block GLchar* info = (GLchar*) fastMalloc(length); 1494dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!info) 1495dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return ""; 1496dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1497cad810f21b803229eb11403f9209855525a25d57Steve Block m_internal->getProgramInfoLog(program, length, &size, info); 1498dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1499dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block String result(info); 1500dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block fastFree(info); 1501dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1502dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return result; 1503dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1504dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1505cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::getRenderbufferParameteriv(GC3Denum target, GC3Denum paramName, GC3Dint* value) 1506dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1507dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1508dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->getRenderbufferParameteriv(target, paramName, value); 1509dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1510dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1511cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::getShaderiv(Platform3DObject shader, GC3Denum paramName, GC3Dint* value) 1512dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1513dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ASSERT(shader); 1514dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1515cad810f21b803229eb11403f9209855525a25d57Steve Block m_internal->getShaderiv(shader, paramName, value); 1516dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1517dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1518e8b154fd68f9b33be40a3590e58347f353835f5cSteve BlockString GraphicsContext3D::getShaderInfoLog(Platform3DObject shader) 1519dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1520dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1521dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1522cad810f21b803229eb11403f9209855525a25d57Steve Block GLint length = 0; 1523cad810f21b803229eb11403f9209855525a25d57Steve Block m_internal->getShaderiv(shader, GraphicsContext3D::INFO_LOG_LENGTH, &length); 1524dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1525cad810f21b803229eb11403f9209855525a25d57Steve Block GLsizei size = 0; 1526dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block GLchar* info = (GLchar*) fastMalloc(length); 1527dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!info) 1528dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return ""; 1529dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1530cad810f21b803229eb11403f9209855525a25d57Steve Block m_internal->getShaderInfoLog(shader, length, &size, info); 1531dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1532dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block String result(info); 1533dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block fastFree(info); 1534dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1535dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return result; 1536dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1537dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1538e8b154fd68f9b33be40a3590e58347f353835f5cSteve BlockString GraphicsContext3D::getShaderSource(Platform3DObject shader) 1539dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1540dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1541dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1542cad810f21b803229eb11403f9209855525a25d57Steve Block GLint length = 0; 1543cad810f21b803229eb11403f9209855525a25d57Steve Block m_internal->getShaderiv(shader, GraphicsContext3D::SHADER_SOURCE_LENGTH, &length); 1544dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1545cad810f21b803229eb11403f9209855525a25d57Steve Block GLsizei size = 0; 1546dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block GLchar* info = (GLchar*) fastMalloc(length); 1547dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!info) 1548dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return ""; 1549dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1550cad810f21b803229eb11403f9209855525a25d57Steve Block m_internal->getShaderSource(shader, length, &size, info); 1551dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1552dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block String result(info); 1553dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block fastFree(info); 1554dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1555dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return result; 1556dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1557dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1558cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::getTexParameterfv(GC3Denum target, GC3Denum paramName, GC3Dfloat* value) 1559dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1560dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1561dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glGetTexParameterfv(target, paramName, value); 1562dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1563dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1564cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::getTexParameteriv(GC3Denum target, GC3Denum paramName, GC3Dint* value) 1565dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1566dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1567dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glGetTexParameteriv(target, paramName, value); 1568dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1569dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1570cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::getUniformfv(Platform3DObject program, GC3Dint location, GC3Dfloat* value) 1571dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1572dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1573cad810f21b803229eb11403f9209855525a25d57Steve Block m_internal->getUniformfv(program, location, value); 1574dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1575dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1576cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::getUniformiv(Platform3DObject program, GC3Dint location, GC3Dint* value) 1577dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1578dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1579cad810f21b803229eb11403f9209855525a25d57Steve Block m_internal->getUniformiv(program, location, value); 1580dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1581dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 158281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen MurdochGC3Dint GraphicsContext3D::getUniformLocation(Platform3DObject program, const String& name) 1583dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1584dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ASSERT(program); 1585dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1586dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1587cad810f21b803229eb11403f9209855525a25d57Steve Block return m_internal->getUniformLocation(program, name.utf8().data()); 1588dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1589dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1590cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::getVertexAttribfv(GC3Duint index, GC3Denum paramName, GC3Dfloat* value) 1591dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1592dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1593dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->getVertexAttribfv(index, paramName, value); 1594dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1595dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1596cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::getVertexAttribiv(GC3Duint index, GC3Denum paramName, GC3Dint* value) 1597dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1598dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1599dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->getVertexAttribiv(index, paramName, value); 1600dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1601dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1602cad810f21b803229eb11403f9209855525a25d57Steve BlockGC3Dsizeiptr GraphicsContext3D::getVertexAttribOffset(GC3Duint index, GC3Denum paramName) 1603dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1604dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1605dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1606cad810f21b803229eb11403f9209855525a25d57Steve Block GLvoid* pointer = 0; 1607dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->getVertexAttribPointerv(index, paramName, &pointer); 1608cad810f21b803229eb11403f9209855525a25d57Steve Block return static_cast<GC3Dsizeiptr>(reinterpret_cast<intptr_t>(pointer)); 1609dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1610dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1611cad810f21b803229eb11403f9209855525a25d57Steve Blockbool GraphicsContext3D::texImage2D(GC3Denum target, GC3Dint level, GC3Denum internalformat, GC3Dsizei width, GC3Dsizei height, GC3Dint border, GC3Denum format, GC3Denum type, const void* pixels) 1612dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 161321939df44de1705786c545cd1bf519d47250322dBen Murdoch m_internal->m_glWidget->makeCurrent(); 1614dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glTexImage2D(target, level, internalformat, width, height, border, format, type, pixels); 1615cad810f21b803229eb11403f9209855525a25d57Steve Block return true; 1616dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1617dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1618cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::texSubImage2D(GC3Denum target, GC3Dint level, GC3Dint xoff, GC3Dint yoff, GC3Dsizei width, GC3Dsizei height, GC3Denum format, GC3Denum type, const void* pixels) 1619dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 162021939df44de1705786c545cd1bf519d47250322dBen Murdoch m_internal->m_glWidget->makeCurrent(); 1621dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glTexSubImage2D(target, level, xoff, yoff, width, height, format, type, pixels); 1622dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1623dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1624cad810f21b803229eb11403f9209855525a25d57Steve BlockPlatform3DObject GraphicsContext3D::createBuffer() 1625dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1626dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1627cad810f21b803229eb11403f9209855525a25d57Steve Block GLuint handle = 0; 1628dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->genBuffers(/* count */ 1, &handle); 1629dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return handle; 1630dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1631dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1632cad810f21b803229eb11403f9209855525a25d57Steve BlockPlatform3DObject GraphicsContext3D::createFramebuffer() 1633dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1634dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1635cad810f21b803229eb11403f9209855525a25d57Steve Block GLuint handle = 0; 1636dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->genFramebuffers(/* count */ 1, &handle); 1637dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return handle; 1638dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1639dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1640cad810f21b803229eb11403f9209855525a25d57Steve BlockPlatform3DObject GraphicsContext3D::createProgram() 1641dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1642dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1643dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return m_internal->createProgram(); 1644dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1645dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1646cad810f21b803229eb11403f9209855525a25d57Steve BlockPlatform3DObject GraphicsContext3D::createRenderbuffer() 1647dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1648dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1649cad810f21b803229eb11403f9209855525a25d57Steve Block GLuint handle = 0; 1650dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->genRenderbuffers(/* count */ 1, &handle); 1651dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return handle; 1652dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1653dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1654cad810f21b803229eb11403f9209855525a25d57Steve BlockPlatform3DObject GraphicsContext3D::createShader(GC3Denum type) 1655dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1656dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1657cad810f21b803229eb11403f9209855525a25d57Steve Block return m_internal->createShader(type); 1658dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1659dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1660cad810f21b803229eb11403f9209855525a25d57Steve BlockPlatform3DObject GraphicsContext3D::createTexture() 1661dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1662dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1663cad810f21b803229eb11403f9209855525a25d57Steve Block GLuint handle = 0; 1664dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glGenTextures(1, &handle); 1665dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return handle; 1666dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1667dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1668cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::deleteBuffer(Platform3DObject buffer) 1669dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1670dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1671dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->deleteBuffers(1, &buffer); 1672dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1673dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1674cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::deleteFramebuffer(Platform3DObject framebuffer) 1675dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1676dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1677dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->deleteFramebuffers(1, &framebuffer); 1678dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1679dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1680cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::deleteProgram(Platform3DObject program) 1681dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1682dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1683dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->deleteProgram(program); 1684dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1685dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1686cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::deleteRenderbuffer(Platform3DObject renderbuffer) 1687dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1688dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1689dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->deleteRenderbuffers(1, &renderbuffer); 1690dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1691dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1692cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::deleteShader(Platform3DObject shader) 1693dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1694dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1695dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->deleteShader(shader); 1696dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1697dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1698cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::deleteTexture(Platform3DObject texture) 1699dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1700dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_glWidget->makeCurrent(); 1701dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block glDeleteTextures(1, &texture); 1702dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1703dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1704cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid GraphicsContext3D::synthesizeGLError(GC3Denum error) 1705dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1706dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_internal->m_syntheticErrors.add(error); 1707dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1708dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 17092bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid GraphicsContext3D::markLayerComposited() 17102bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 17112bde8e466a4451c7319e3a072d118917957d6554Steve Block m_internal->m_layerComposited = true; 17122bde8e466a4451c7319e3a072d118917957d6554Steve Block} 17132bde8e466a4451c7319e3a072d118917957d6554Steve Block 17142bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid GraphicsContext3D::markContextChanged() 17152bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 17162bde8e466a4451c7319e3a072d118917957d6554Steve Block // FIXME: Any accelerated compositor needs to be told to re-read from here. 17172bde8e466a4451c7319e3a072d118917957d6554Steve Block m_internal->m_layerComposited = false; 17182bde8e466a4451c7319e3a072d118917957d6554Steve Block} 17192bde8e466a4451c7319e3a072d118917957d6554Steve Block 17202bde8e466a4451c7319e3a072d118917957d6554Steve Blockbool GraphicsContext3D::layerComposited() const 17212bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 17222bde8e466a4451c7319e3a072d118917957d6554Steve Block return m_internal->m_layerComposited; 17232bde8e466a4451c7319e3a072d118917957d6554Steve Block} 17242bde8e466a4451c7319e3a072d118917957d6554Steve Block 172528040489d744e0c5d475a88663056c9040ed5320Teng-Hui ZhuExtensions3D* GraphicsContext3D::getExtensions() 172628040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu{ 172728040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu if (!m_internal->m_extensions) 172828040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu m_internal->m_extensions = adoptPtr(new Extensions3DQt); 172981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch return m_internal->m_extensions.get(); 173028040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu} 173128040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu 1732dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockbool GraphicsContext3D::getImageData(Image* image, 1733cad810f21b803229eb11403f9209855525a25d57Steve Block GC3Denum format, 1734cad810f21b803229eb11403f9209855525a25d57Steve Block GC3Denum type, 1735dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block bool premultiplyAlpha, 17366b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner bool ignoreGammaAndColorProfile, 173706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen Vector<uint8_t>& outputVector) 1738dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 17396b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner UNUSED_PARAM(ignoreGammaAndColorProfile); 1740545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch if (!image) 1741545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch return false; 1742545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch QPixmap* nativePixmap = image->nativeImageForCurrentFrame(); 1743545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch if (!nativePixmap) 1744545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch return false; 1745dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 174681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch AlphaOp neededAlphaOp = AlphaDoNothing; 1747e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block if (!premultiplyAlpha) 174806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen // FIXME: must fetch the image data before the premultiplication step 174981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch neededAlphaOp = AlphaDoUnmultiply; 175021939df44de1705786c545cd1bf519d47250322dBen Murdoch QImage nativeImage = nativePixmap->toImage().convertToFormat(QImage::Format_ARGB32); 175106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen outputVector.resize(nativeImage.byteCount()); 175281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch return packPixels(nativeImage.rgbSwapped().bits(), SourceFormatRGBA8, image->width(), image->height(), 0, 175306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen format, type, neededAlphaOp, outputVector.data()); 1754dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1755dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 17562fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockvoid GraphicsContext3D::setContextLostCallback(PassOwnPtr<ContextLostCallback>) 17572fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{ 17582fc2651226baac27029e38c9d6ef883fa32084dbSteve Block} 17592fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 1760dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1761dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 17622fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#endif // ENABLE(WEBGL) 1763