Exemplo n.º 1
0
bool GLProgram::link()
{
    CCASSERT(_program != 0, "Cannot link invalid program");

    GLint status = GL_TRUE;

    bindPredefinedVertexAttribs();

    glLinkProgram(_program);

    // Calling glGetProgramiv(...GL_LINK_STATUS...) will force linking of the program at this moment.
    // Otherwise, they might be linked when they are used for the first time. (I guess this depends on the driver implementation)
    // So it might slow down the "booting" process on certain devices. But, on the other hand it is important to know if the shader
    // linked successfully. Some shaders might be downloaded in runtime so, release version should have this check.
    // For more info, see Github issue #16231
    glGetProgramiv(_program, GL_LINK_STATUS, &status);

    if (status == GL_FALSE)
    {
        CCLOG("cocos2d: ERROR: Failed to link program: %i", _program);
        GL::deleteProgram(_program);
        _program = 0;
    }
    else
    {
        parseVertexAttribs();
        parseUniforms();

        clearShader();
    }

    return (status == GL_TRUE);
}
Exemplo n.º 2
0
bool GLProgram::link()
{
    CCASSERT(_program != 0, "Cannot link invalid program");

    GLint status = GL_TRUE;

    bindPredefinedVertexAttribs();

    glLinkProgram(_program);

    parseVertexAttribs();
    parseUniforms();

    clearShader();

#if DEBUG || (CC_TARGET_PLATFORM == CC_PLATFORM_WINRT)
    glGetProgramiv(_program, GL_LINK_STATUS, &status);

    if (status == GL_FALSE)
    {
        CCLOG("cocos2d: ERROR: Failed to link program: %i", _program);
        GL::deleteProgram(_program);
        _program = 0;
    }
#endif

    return (status == GL_TRUE);
}
Exemplo n.º 3
0
	void CD3D11Driver::beginScene(
		bool zBuffer,
		bool stencilBuffer,
		const f32 clearColor[],
		f32 depthValue,
		u8 stencilValue)
	{
		//md3dDeviceContext->ClearRenderTargetView(mDefaultRenderTargetView, clearColor);

		UINT clearFlag = 0;
		if (zBuffer) clearFlag |= D3D11_CLEAR_DEPTH;
		if (stencilBuffer) clearFlag |= D3D11_CLEAR_STENCIL;

		//md3dDeviceContext->ClearDepthStencilView(mDepthStencilView, clearFlag, depthValue, stencilValue);

		D3D11DriverState.Reset();

		for (u32 i = 0; i <= EST_SHADER_COUNT; i++)
			clearShader((E_SHADER_TYPE)i);

		mCurrentPipelineUsage = EPU_FORWARD;

		setDefaultRenderTargetAndDepthStencil();

		// if it is deferred shading, setup gbuffer
		if (mDeferredShading)
		{
			setupGBuffer();
		}

		md3dDeviceContext->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
		md3dDeviceContext->ClearRenderTargetView(mDefaultRenderTargetView, clearColor);
		md3dDeviceContext->ClearDepthStencilView(mDefaultDepthStencilView, clearFlag, depthValue, stencilValue);
	}
Exemplo n.º 4
0
GLProgram::~GLProgram()
{
    CCLOGINFO("%s %d deallocing GLProgram: %p", __FUNCTION__, __LINE__, this);

    clearShader();

    if (_program)
    {
        GL::deleteProgram(_program);
    }

    
    clearHashUniforms();
}
Exemplo n.º 5
0
GLProgram::~GLProgram()
{
    CCLOGINFO("%s %d deallocing GLProgram: %p", __FUNCTION__, __LINE__, this);

    clearShader();

    if (_program)
    {
        GL::deleteProgram(_program);
    }

    for (auto e : _hashForUniforms)
    {
        free(e.second.first);
    }
    _hashForUniforms.clear();
}
void surfaceShader::rebuild()
    {
    clearShader();
    if( isValidForFragmentCompile() )
        {
        compileFragment();

        if( this->sizeErrors() )
            {
            return;
            }

        if( isValidForVertexCompile() )
            {
            compileVertex();

            if( this->sizeErrors() )
                {
                return;
                }
            }
        linkProgram();
        }
    }
Exemplo n.º 7
0
	CD3D11Driver::~CD3D11Driver()
	{
		/* 释放的顺序
		  1, mesh
		  2, material
		  3, pipeline
		  4, texture
		  5, shader,
		  6, inputlayout
		  7, render-state
		  */

		mDefaultRenderTarget->drop();
		ReleaseCOM(D3D11DriverState.ShadowMapRasterizerState);

		for (u32 i = 0; i < EST_SHADER_COUNT; i++)
			clearShader(E_SHADER_TYPE(i));

		ReleaseReferenceCounted(mMeshManager);
		ReleaseReferenceCounted(mMaterialManager);
		ReleaseReferenceCounted(mPipeManager);
		ReleaseReferenceCounted(mTextureManager);
		ReleaseReferenceCounted(mShaderManager);
		ReleaseReferenceCounted(mInputLayoutManager);
		ReleaseReferenceCounted(mRenderStateManager);

		ReleaseReferenceCounted(mResourceFactory);
		ReleaseReferenceCounted(mGeometryCreator);

		ReleaseCOM(md3dSwapChain);
		ReleaseCOM(md3dDeviceContext);
		ReleaseCOM(md3dDevice);
		//md3dDebug->ReportLiveDeviceObjects(D3D11_RLDO_DETAIL);

		ReleaseCOM(md3dDebug);
	}
Exemplo n.º 8
0
CaptureWinGLEngine::~CaptureWinGLEngine()
{
	clearShader();
}
Exemplo n.º 9
0
void CaptureWinGLEngine::changeShader()
{
	m_formatChange = false;
	clearShader();

	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	glOrtho(0, m_frameWidth, m_frameHeight, 0, 0, 1);
	resizeGL(QGLWidget::width(), QGLWidget::height());
	checkError("Render settings.\n");

	switch (m_frameFormat) {
	case V4L2_PIX_FMT_YUYV:
	case V4L2_PIX_FMT_YVYU:
	case V4L2_PIX_FMT_UYVY:
	case V4L2_PIX_FMT_VYUY:
		shader_YUY2(m_frameFormat);
		break;

	case V4L2_PIX_FMT_YUV420:
	case V4L2_PIX_FMT_YVU420:
		shader_YUV();
		break;

	case V4L2_PIX_FMT_RGB32:
		m_screenTextureCount = 1;
		glActiveTexture(GL_TEXTURE0);
		glGenTextures(m_screenTextureCount, m_screenTexture);
		configureTexture(0);
		glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA4, m_frameWidth, m_frameHeight, 0,
			     GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, NULL);
		checkError("RGB32 shader");
		break;

	case V4L2_PIX_FMT_BGR32:
		m_screenTextureCount = 1;
		glActiveTexture(GL_TEXTURE0);
		glGenTextures(m_screenTextureCount, m_screenTexture);
		configureTexture(0);
		glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA4, m_frameWidth, m_frameHeight, 0,
			     GL_RGBA, GL_UNSIGNED_INT_8_8_8_8, NULL);
		checkError("BGR32 shader");
		break;

	case V4L2_PIX_FMT_RGB555:
		m_screenTextureCount = 1;
		glActiveTexture(GL_TEXTURE0);
		glGenTextures(m_screenTextureCount, m_screenTexture);
		configureTexture(0);
		glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB5_A1, m_frameWidth, m_frameHeight, 0,
			     GL_BGRA, GL_UNSIGNED_SHORT_1_5_5_5_REV, NULL);
		checkError("RGB555 shader");
		break;

	case V4L2_PIX_FMT_RGB565:
		m_screenTextureCount = 1;
		glActiveTexture(GL_TEXTURE0);
		glGenTextures(m_screenTextureCount, m_screenTexture);
		configureTexture(0);
		glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, m_frameWidth, m_frameHeight, 0,
			     GL_RGB, GL_UNSIGNED_SHORT_5_6_5, NULL);
		checkError("RGB565 shader");
		break;
	case V4L2_PIX_FMT_BGR24:
		shader_BGR();
		break;
	case V4L2_PIX_FMT_RGB24:
	default:
		m_screenTextureCount = 1;
		glActiveTexture(GL_TEXTURE0);
		glGenTextures(m_screenTextureCount, m_screenTexture);
		configureTexture(0);
		glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, m_frameWidth, m_frameHeight, 0,
			     GL_RGB, GL_UNSIGNED_BYTE, NULL);
		checkError("Default shader");
		break;
	}

	glClear(GL_COLOR_BUFFER_BIT);
}
Exemplo n.º 10
0
ShaderNode::~ShaderNode( void )
{
	clearShader();
}
Exemplo n.º 11
0
void ShaderNode::loadShader()
{
	GLint			Result;

	clearShader();

	if( ( mProgramId = glCreateProgram() ) == 0 )
	{
		return;
	}

	OPENGL_PLUGIN_DEBUG;

	loadShader( mPinShaderVertex, mShaderVertId, GL_VERTEX_SHADER );

	OPENGL_PLUGIN_DEBUG;

#if defined( GL_TESS_CONTROL_SHADER )
	loadShader( mPinShaderTessCtrl, mShaderTessCtrlId, GL_TESS_CONTROL_SHADER );

	OPENGL_PLUGIN_DEBUG;
#endif

#if defined( GL_TESS_EVALUATION_SHADER )
	loadShader( mPinShaderTessEval, mShaderTessEvalId, GL_TESS_EVALUATION_SHADER );

	OPENGL_PLUGIN_DEBUG;
#endif

	loadShader( mPinShaderGeometry, mShaderGeomId, GL_GEOMETRY_SHADER );

	OPENGL_PLUGIN_DEBUG;

	loadShader( mPinShaderFragment, mShaderFragId, GL_FRAGMENT_SHADER );

	OPENGL_PLUGIN_DEBUG;

	//-------------------------------------------------------------------------

	glLinkProgram( mProgramId );

	OPENGL_PLUGIN_DEBUG;

	glGetProgramiv( mProgramId, GL_LINK_STATUS, &Result );

	if( Result != GL_TRUE )
	{
		if( !QOpenGLContext::currentContext()->format().testOption( QSurfaceFormat::DebugContext ) )
		{
			glGetShaderiv( mProgramId, GL_INFO_LOG_LENGTH, &Result );

			QVector<GLchar>	Log( Result + 1 );

			glGetShaderInfoLog( mProgramId, Result, &Result, Log.data() );

			qWarning() << QString( Log.data() );
		}

		return;
	}

	mProgramLinked = true;

	//-------------------------------------------------------------------------

	OPENGL_PLUGIN_DEBUG;

	processShader( mProgramId );

	OPENGL_PLUGIN_DEBUG;
}
Exemplo n.º 12
0
void OsgProgram::clearGeometryShader()
{
	return clearShader(SHADER_TYPE_GEOMETRY);
}
Exemplo n.º 13
0
void OsgProgram::clearVertexShader()
{
	clearShader(SHADER_TYPE_VERTEX);
}
Exemplo n.º 14
0
void OsgProgram::clearFragmentShader()
{
	clearShader(SHADER_TYPE_FRAGMENT);
}