#Shader affecting other Renderer

1 messages · Page 1 of 1 (latest)

pale valve
#
.
.
.
    auto& reversedShader = co::Assets::Get<co::Shader>("reversed"); --- 1

    glm::vec2 pos = { 0.f, 0.f };

    auto sprite = co::SpriteRenderer(); --- 2
    auto reversed = co::SpriteRenderer(&reversedShader); --- 3

    // Game loop
    while (window.IsRunning())
    {
        window.Clear({ 79, 98, 128 });

        sprite.Draw(flappyBird, pos); --- 4
.
.
.

This is some of my code.

  • 1
    reversedShader is a co::Shader& variable, which is a shader that renders objects with reversed colors.
  • 2
    sprite is a co::SpriteRenderer variable, which is a renderer with default shader. This renders objects normally.
  • 3
    reversed is a co::SpriteRenderer variable, which is a renderer with reversedShader. This renders objects with reversed colors, as the shader does.
  • 4
    This code is NOT using reversed, I'm using sprite to render my flappyBird sprite with normal colors.

The problem is - the flappyBird looks reversed at the result. Even though it's rendering with normal shaders, normal renderer. I checked VS debugger and says each renderers are using different shader data. I am really confused.

I will show you my other codes if they are needed.

  • Edit.
    I found that it works as I want if I change some lines.
    FROM
    auto sprite = co::SpriteRenderer(); --- 2
    auto reversed = co::SpriteRenderer(&reversedShader); --- 3

TO

    auto reversed = co::SpriteRenderer(&reversedShader); --- 3
    auto sprite = co::SpriteRenderer(); --- 2

Seems like they are working like a static or singleton class. Really confusing

hard urchinBOT
#

When your question is answered use !solved to mark the question as resolved.

Remember to ask specific questions, provide necessary details, and reduce your question to its simplest form. For tips on how to ask a good question run !howto ask.

pale valve
#

I figured it out, this is because OpenGL uses a global state.

#

!solved