/*************************************************************//**
     *
     *  @brief  描画処理を行う
     *  @param  なし
     *  @return なし
     *
     ****************************************************************/
    void C_SpriteCreater::Draw()
    {
        // 頂点の書き換え
        pPointDatas_->RewriteVertices(vertices_.data(), drawSpriteCount_);

        // シェーダーの使用開始
        pGlslObject_->Begin();

        // サブルーチンを設定
        pGlslObject_->BindActiveSubroutine(subroutineIndices_[cameraType_], Shader::GLSL::Type::s_GEOMETRY);
        
        // ユニフォーム変数を設定
        SetUniformVariable();

        // テクスチャマネージャーとOpenGLマネージャーを取得
        auto pTextureManager = Texture::C_TextureManager::s_GetInstance();
        auto pOpenGlManager = OpenGL::C_OpenGlManager::s_GetInstance();

        // ブレンドを有効化し、ブレンドに使用する関数を設定
        pOpenGlManager->EnableBlend(true);
        pOpenGlManager->SetBlendFunction(sourceFactor_, destinationFactor_);

        // カリングを無効化
        pOpenGlManager->EnableCulling(false);

        // 深度のマスクを有効化
        pOpenGlManager->EnableDepthMask(true);

        // アクティブなテクスチャユニットを設定し、テクスチャをバインド
        pTextureManager->SetActiveUnit(Fixed::Texture::s_UNIT_NUMBER);
        pTextureManager->Bind(Texture::Type::s_2D, pTextureData_->handle_);

        // スプライトを描画
        pOpenGlManager->DrawPrimitive(OpenGL::Primitive::s_POINT, pPointDatas_->GetVertexArrayObjectHandle(), drawSpriteCount_);

        // 深度のマスクを無効化
        pOpenGlManager->EnableDepthMask(false);

        // カリングを有効化
        pOpenGlManager->EnableCulling(true);

        // ブレンドを無効化
        pOpenGlManager->EnableBlend(false);

        // テクスチャをアンバインド
        pTextureManager->Unbind(Texture::Type::s_2D);

        // シェーダーの使用終了
        pGlslObject_->End();

        drawSpriteCount_ = 0;
    }
示例#2
0
void IMaterial::AddTexture( ITexture* texture )
{
	MEDUSA_ASSERT_NOT_NULL(texture,"");
	MEDUSA_ASSERT_FALSE(mTextures.ContainsKey(texture->Unit()),"Duplicate add texture of same unit");
	MEDUSA_ASSERT_FALSE(mTextureSamplerDict.ContainsKey(texture->SamplerName()),"Duplicate add texture of same sampler name");

	texture->Retain();
	mTextures.Add(texture->Unit(),texture);
	mTextureSamplerDict.Add(texture->SamplerName(), texture);

	EnableBlend(texture->IsBlend());
	
	if (mFirstTexture==nullptr)
	{
		mFirstTexture=texture;
	}
}