void GLVec4ScalarBench::setup(const GrGLContext* ctx) { const GrGLInterface* gl = ctx->interface(); if (!gl) { SkFAIL("GL interface is nullptr in setup()!\n"); } fFboTextureId = SetupFramebuffer(gl, kScreenWidth, kScreenHeight); fProgram = this->setupShader(ctx); int index = 0; SkMatrix viewMatrices[kNumTriPerDraw]; setup_matrices(kNumTriPerDraw, [&index, &viewMatrices](const SkMatrix& m) { viewMatrices[index++] = m; }); this->setupSingleVbo(gl, viewMatrices); GR_GL_CALL(gl, UseProgram(fProgram)); }
void GLCpuPosInstancedArraysBench::setup(const GrGLContext* ctx) { const GrGLInterface* gl = ctx->interface(); fTexture = SetupFramebuffer(gl, kScreenWidth, kScreenHeight); fProgram = this->setupShader(ctx); // setup matrices int index = 0; SkMatrix viewMatrices[kNumTri]; setup_matrices(kNumTri, [&index, &viewMatrices](const SkMatrix& m) { viewMatrices[index++] = m; }); // setup VAO GR_GL_CALL(gl, GenVertexArrays(1, &fVAO)); GR_GL_CALL(gl, BindVertexArray(fVAO)); switch (fVboSetup) { case kUseOne_VboSetup: this->setupSingleVbo(gl, viewMatrices); break; case kUseTwo_VboSetup: this->setupDoubleVbo(gl, viewMatrices); break; case kUseInstance_VboSetup: this->setupInstanceVbo(gl, viewMatrices); break; } // clear screen GR_GL_CALL(gl, ClearColor(0.03f, 0.03f, 0.03f, 1.0f)); GR_GL_CALL(gl, Clear(GR_GL_COLOR_BUFFER_BIT)); // set us up to draw GR_GL_CALL(gl, UseProgram(fProgram)); GR_GL_CALL(gl, BindVertexArray(fVAO)); }
/** ** Initialize OpenGL */ static void InitOpenGL() { InitOpenGLExtensions(); glViewport(0, 0, (GLsizei)Video.ViewportWidth, (GLsizei)Video.ViewportHeight); #ifdef USE_OPENGL glMatrixMode(GL_PROJECTION); glLoadIdentity(); #endif #ifdef USE_GLES glOrthof(0.0f, (GLfloat)Video.Width, (GLfloat)Video.Height, 0.0f, -1.0f, 1.0f); #endif #ifdef USE_OPENGL if (!GLShaderPipelineSupported) { glOrtho(0, Video.Width, Video.Height, 0, -1, 1); } else { glOrtho(0, Video.ViewportWidth, Video.ViewportHeight, 0, -1, 1); } #endif glMatrixMode(GL_MODELVIEW); glLoadIdentity(); #ifdef USE_OPENGL glTranslatef(0.375, 0.375, 0.); #endif glClearColor(0.0f, 0.0f, 0.0f, 0.0f); #ifdef USE_GLES glClearDepthf(1.0f); #endif #ifdef USE_OPENGL glClearDepth(1.0f); if (GLShaderPipelineSupported) { SetupFramebuffer(); } #endif glShadeModel(GL_FLAT); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_BLEND); glEnable(GL_TEXTURE_2D); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glEnable(GL_LINE_SMOOTH); glHint(GL_LINE_SMOOTH_HINT, GL_NICEST); glGetIntegerv(GL_MAX_TEXTURE_SIZE, &GLMaxTextureSize); if (GLMaxTextureSize == 0) { // FIXME: try to use GL_PROXY_TEXTURE_2D to get a valid size #if 0 glTexImage2D(GL_PROXY_TEXTURE_2D, 0, GL_RGBA, size, size, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); glGetTexLevelParameterfv(GL_PROXY_TEXTURE_2D, 0, GL_TEXTURE_INTERNAL_FORMAT, &internalFormat); #endif fprintf(stderr, "GL_MAX_TEXTURE_SIZE is 0, using 256 by default\n"); GLMaxTextureSize = 256; } if (GLMaxTextureSize > GLMaxTextureSizeOverride && GLMaxTextureSizeOverride > 0) { GLMaxTextureSize = GLMaxTextureSizeOverride; } }
void CGSH_Direct3D9::SetRenderingContext(uint64 primReg) { auto prim = make_convertible<PRMODE>(primReg); unsigned int context = prim.nContext; uint64 testReg = m_nReg[GS_REG_TEST_1 + context]; uint64 frameReg = m_nReg[GS_REG_FRAME_1 + context]; uint64 alphaReg = m_nReg[GS_REG_ALPHA_1 + context]; uint64 zbufReg = m_nReg[GS_REG_ZBUF_1 + context]; uint64 tex0Reg = m_nReg[GS_REG_TEX0_1 + context]; uint64 tex1Reg = m_nReg[GS_REG_TEX1_1 + context]; uint64 clampReg = m_nReg[GS_REG_CLAMP_1 + context]; uint64 scissorReg = m_nReg[GS_REG_SCISSOR_1 + context]; if(!m_renderState.isValid || (m_renderState.primReg != primReg)) { m_device->SetRenderState(D3DRS_ALPHABLENDENABLE, ((prim.nAlpha != 0) && m_alphaBlendingEnabled) ? TRUE : FALSE); } if(!m_renderState.isValid || (m_renderState.alphaReg != alphaReg)) { SetupBlendingFunction(alphaReg); } if(!m_renderState.isValid || (m_renderState.testReg != testReg)) { SetupTestFunctions(testReg); } if(!m_renderState.isValid || (m_renderState.zbufReg != zbufReg) || (m_renderState.frameReg != frameReg)) { SetupDepthBuffer(zbufReg, frameReg); } if(!m_renderState.isValid || (m_renderState.frameReg != frameReg) || (m_renderState.scissorReg != scissorReg)) { SetupFramebuffer(frameReg, scissorReg); } if(!m_renderState.isValid || (m_renderState.tex0Reg != tex0Reg) || (m_renderState.tex1Reg != tex1Reg) || (m_renderState.clampReg != clampReg)) { SetupTexture(tex0Reg, tex1Reg, clampReg); } m_renderState.isValid = true; m_renderState.primReg = primReg; m_renderState.alphaReg = alphaReg; m_renderState.testReg = testReg; m_renderState.zbufReg = zbufReg; m_renderState.frameReg = frameReg; m_renderState.tex0Reg = tex0Reg; m_renderState.tex1Reg = tex1Reg; m_renderState.clampReg = clampReg; m_renderState.scissorReg = scissorReg; auto offset = make_convertible<XYOFFSET>(m_nReg[GS_REG_XYOFFSET_1 + context]); m_nPrimOfsX = offset.GetX(); m_nPrimOfsY = offset.GetY(); if(GetCrtIsInterlaced() && GetCrtIsFrameMode()) { if(m_nCSR & CSR_FIELD) { m_nPrimOfsY += 0.5; } } }