/*************************************************************//** * * @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; }
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; } }