コード例 #1
0
ファイル: RenderPass.cpp プロジェクト: inosphe/GIRenderer
	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);
		}
	}
コード例 #2
0
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();
}
コード例 #3
0
ファイル: DX11ProgramStage.cpp プロジェクト: MIFOZ/EFE-Engine
	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;
	}
コード例 #4
0
ファイル: vo_gl.c プロジェクト: dr4g0nsr/mplayer-skyviia-8860
/**
 * \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;
}