GrGpuGLShaders.h revision 4f1dae40e24d57d647db01443b8bf2410514b8b5
187b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 21cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger/* 31cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Copyright 2011 Google Inc. 41cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * 51cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Use of this source code is governed by a BSD-style license that can be 61cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * found in the LICENSE file. 787b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger */ 887b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 987b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 101cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 1187b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger#ifndef GrGpuGLShaders_DEFINED 1287b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger#define GrGpuGLShaders_DEFINED 1387b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 1487b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger#include "GrGpuGL.h" 1587b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger#include "GrGLProgram.h" 1687b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 1787b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenbergerclass GrGpuGLProgram; 1887b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 1987b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger// Programmable OpenGL or OpenGL ES 2.0 2087b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenbergerclass GrGpuGLShaders : public GrGpuGL { 2187b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenbergerpublic: 224f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger GrGpuGLShaders(const GrGLContextInfo& ctxInfo); 2387b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger virtual ~GrGpuGLShaders(); 2487b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 250199fa7423f89a129da2b22a488f2c18e2e4727fDerek Sollenberger virtual void abandonResources(); 260199fa7423f89a129da2b22a488f2c18e2e4727fDerek Sollenberger 271cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger bool programUnitTest(); 281cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 2987b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenbergerprotected: 3087b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger // overrides from GrGpu 311cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger virtual void onResetContext() SK_OVERRIDE; 3287b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger virtual bool flushGraphicsState(GrPrimitiveType type); 3387b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger virtual void setupGeometry(int* startVertex, 3487b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger int* startIndex, 3587b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger int vertexCount, 3687b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger int indexCount); 3787b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger virtual void postDraw(); 3887b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 3987b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenbergerprivate: 4087b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 411cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger // for readability of function impls 421cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger typedef GrGLProgram::ProgramDesc ProgramDesc; 431cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger typedef ProgramDesc::StageDesc StageDesc; 441cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger typedef GrGLProgram::CachedData CachedData; 451cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 4687b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger class ProgramCache; 4787b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 4887b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger // Helpers to make code more readable 491cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger const GrMatrix& getHWViewMatrix(); 501cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger void recordHWViewMatrix(const GrMatrix& matrix); 5187b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger const GrMatrix& getHWSamplerMatrix(int stage); 5287b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger void recordHWSamplerMatrix(int stage, const GrMatrix& matrix); 5387b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 5487b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger // sets the texture matrix uniform for currently bound program 5587b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger void flushTextureMatrix(int stage); 5687b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 570b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger // sets the texture domain uniform for currently bound program 580b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger void flushTextureDomain(int stage); 590b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger 604f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger // sets the color specified by GrDrawState::setColor() 611cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger void flushColor(GrColor color); 6235e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenberger 634f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger // sets the color specified by GrDrawState::setCoverage() 644f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger void flushCoverage(GrColor color); 654f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger 6687b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger // sets the MVP matrix uniform for currently bound program 6787b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger void flushViewMatrix(); 6887b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 6987b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger // flushes the parameters to two point radial gradient 7087b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger void flushRadial2(int stage); 7187b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 721cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger // flushes the parameters for convolution 731cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger void flushConvolution(int stage); 741cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 7535e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenberger // flushes the normalized texel size 7635e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenberger void flushTexelSize(int stage); 7735e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenberger 7835e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenberger // flushes the edges for edge AA 7935e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenberger void flushEdgeAAData(); 8035e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenberger 811cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger // flushes the color matrix 821cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger void flushColorMatrix(); 8387b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 841cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger static void DeleteProgram(const GrGLInterface* gl, 851cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger CachedData* programData); 8687b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 871cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger void buildProgram(GrPrimitiveType typeBlend, 881cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger BlendOptFlags blendOpts, 891cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger GrBlendCoeff dstCoeff); 9087b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 9187b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger ProgramCache* fProgramCache; 921cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger CachedData* fProgramData; 9387b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger GrGLuint fHWProgramID; 9487b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger GrGLProgram fCurrentProgram; 951cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger // If we get rid of fixed function subclass this should move 961cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger // to the GLCaps struct in parent class 971cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger GrGLint fMaxVertexAttribs; 9887b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 9987b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef GrGpuGL INHERITED; 10087b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger}; 10187b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 10287b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger#endif 10387b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 104