Exemplo n.º 1
0
void Renderer::init(Data *terrainData)
{
    vbase::Loadable::Begin b(this);
    mTerrainData = terrainData;
    ShaderProgram::init();

    mWaterRenderer.init(mTerrainData);

    //connect to terrainData signals
    {
        QObject::connect(terrainData, &Data::heightMapChanged, [this]()
        {
            this->mInvalidations.terrainData = true;
        });

        QObject::connect(terrainData, &Data::lightMapChanged, [this]()
        {
            this->mInvalidations.terrainData =  true;
        });

        QObject::connect(terrainData, &Data::textureMapResolutionChanged, [this]()
        {
            enqueueUniformValueChange(&mUniforms.textureMapResolution, mTerrainData->textureMapResolution());
        });

        QObject::connect(terrainData, &Data::heightScaleChanged, [this]()
        {
            enqueueUniformValueChange(&mUniforms.heightScale, mTerrainData->heightScale());
        });

        QObject::connect(terrainData, &Data::spanSizeChanged, [this]()
        {
            enqueueUniformValueChange(&mUniforms.spanSize, mTerrainData->spanSize());
        });

        QObject::connect(terrainData, &Data::chunkSizeChanged, [this]()
        {
            enqueueUniformValueChange(&mUniforms.chunkSize, mTerrainData->chunkSize());
        });
    }
}
Exemplo n.º 2
0
void Renderer::init(Data *terrainData)
{
	vbase::Loadable::Begin b(this);

	mTerrainData = terrainData;
	ShaderProgram::init();

	ShaderProgram::bind();
	{
		glGenVertexArrays(1, &mVao);
		glBindVertexArray(mVao);
		{
			glPatchParameteri(GL_PATCH_VERTICES, 4);
			loadTextures();
		}
		glBindVertexArray(0);
	}
	ShaderProgram::release();

	//connect to terrainData signals
	{
		QObject::connect(terrainData, &Data::heightMapChanged, [this]()
		{
			this->mInvalidations.terrainData = true;
		});

		mTerrainData->pHeightScale.addOnChangedListener([this] {
			enqueueUniformValueChange(&mUniforms.heightScale, mTerrainData->pHeightScale());
		});

		mTerrainData->pSpanSize.addOnChangedListener([this] {
			enqueueUniformValueChange(&mUniforms.spanSize, mTerrainData->pSpanSize());
		});
	}

	mElapsedTimer.start();
}