void RenderPass::RenderBegin(FrameBuffer *pFB, bool bClear) { BindProgram(); if(pFB){ pFB->RenderBegin(bClear); } else{ glBindFramebuffer(GL_FRAMEBUFFER, 0); if(bClear) glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); } }
void Shader::LinkProgram() { p = glCreateProgramObjectARB(); for ( std::vector< std::string >::iterator it = vertexes.begin(), it2 = vertexes.end(); it != it2; ++it ) { int s = GetVertexShader( *it ); glAttachObjectARB( p, s ); } for ( std::vector< std::string >::iterator it = fragments.begin(), it2 = fragments.end(); it != it2; ++it ) { int s = GetFragmentShader( *it ); glAttachObjectARB( p, s ); } glLinkProgramARB( p ); BindProgram(); }
void cDX11ProgramStage::ApplyDesiredState(ID3D11DeviceContext *a_pDXContext) { if (m_DesiredState.m_Program.IsUpdateNeeded()) BindProgram(a_pDXContext); if (m_DesiredState.m_ConstantBuffers.IsUpdateNeeded()) BindConstantBuffer(a_pDXContext, 0); if (m_DesiredState.m_SamplerStates.IsUpdateNeeded()) BindSamplerStates(a_pDXContext, 0); if (m_DesiredState.m_ShaderResourceViews.IsUpdateNeeded()) BindShaderResourceViews(a_pDXContext, 0); if (m_DesiredState.m_UnorderedAccessViews.IsUpdateNeeded() || m_DesiredState.m_UAVInitialCounts.IsUpdateNeeded()) BindUnorderedAccessViews(a_pDXContext, 1); m_DesiredState.ResetUpdateFlags(); m_CurrentState = m_DesiredState; }
/** * \brief Initialize a (new or reused) OpenGL context. * set global gl-related variables to their default values */ static int initGl(uint32_t d_width, uint32_t d_height) { int scale_type = mipmap_gen ? GL_LINEAR_MIPMAP_NEAREST : GL_LINEAR; autodetectGlExtensions(); gl_target = use_rectangle == 1 ? GL_TEXTURE_RECTANGLE : GL_TEXTURE_2D; yuvconvtype = use_yuv | lscale << YUV_LUM_SCALER_SHIFT | cscale << YUV_CHROM_SCALER_SHIFT; texSize(image_width, image_height, &texture_width, &texture_height); Disable(GL_BLEND); Disable(GL_DEPTH_TEST); DepthMask(GL_FALSE); Disable(GL_CULL_FACE); Enable(gl_target); DrawBuffer(vo_doublebuffering?GL_BACK:GL_FRONT); TexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); mp_msg(MSGT_VO, MSGL_V, "[gl] Creating %dx%d texture...\n", texture_width, texture_height); if (is_yuv) { int i; int xs, ys; mp_get_chroma_shift(image_format, &xs, &ys); GenTextures(21, default_texs); default_texs[21] = 0; for (i = 0; i < 7; i++) { ActiveTexture(GL_TEXTURE1 + i); BindTexture(GL_TEXTURE_2D, default_texs[i]); BindTexture(GL_TEXTURE_RECTANGLE, default_texs[i + 7]); BindTexture(GL_TEXTURE_3D, default_texs[i + 14]); } ActiveTexture(GL_TEXTURE1); glCreateClearTex(gl_target, gl_texfmt, gl_format, gl_type, scale_type, texture_width >> xs, texture_height >> ys, 128); if (mipmap_gen) TexParameteri(gl_target, GL_GENERATE_MIPMAP, GL_TRUE); ActiveTexture(GL_TEXTURE2); glCreateClearTex(gl_target, gl_texfmt, gl_format, gl_type, scale_type, texture_width >> xs, texture_height >> ys, 128); if (mipmap_gen) TexParameteri(gl_target, GL_GENERATE_MIPMAP, GL_TRUE); ActiveTexture(GL_TEXTURE0); BindTexture(gl_target, 0); } if (is_yuv || custom_prog) { if ((MASK_NOT_COMBINERS & (1 << use_yuv)) || custom_prog) { if (!GenPrograms || !BindProgram) { mp_msg(MSGT_VO, MSGL_ERR, "[gl] fragment program functions missing!\n"); } else { GenPrograms(1, &fragprog); BindProgram(GL_FRAGMENT_PROGRAM, fragprog); } } update_yuvconv(); } glCreateClearTex(gl_target, gl_texfmt, gl_format, gl_type, scale_type, texture_width, texture_height, 0); if (mipmap_gen) TexParameteri(gl_target, GL_GENERATE_MIPMAP, GL_TRUE); resize(d_width, d_height); ClearColor( 0.0f,0.0f,0.0f,0.0f ); Clear( GL_COLOR_BUFFER_BIT ); if (SwapInterval && swap_interval >= 0) SwapInterval(swap_interval); return 1; }