Changeset 27136

Timestamp:
Oct 9, 2022, 12:44:51 PM (22 months ago)
Author:
Vladislav Belov
Message:

Reduces uniforms sizes for the Canvas2D shader.

Differential Revision: https://code.wildfiregames.com/D4796

Location:
ps/trunk
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • ps/trunk/binaries/data/mods/mod/shaders/arb/canvas2d.vp

    r25590 r27136  
    11!!ARBvp1.0
    22
    3 PARAM transform[4] = { program.local[0..3] };
     3PARAM transform = program.local[0];
     4PARAM translation = program.local[1];
    45
    56TEMP position;
    67
    7 DP4 position.x, transform[0], vertex.position;
    8 DP4 position.y, transform[1], vertex.position;
     8MUL position, transform, vertex.position.xyxy;
     9ADD position.x, position.x, position.y;
     10ADD position.y, position.z, position.w;
     11ADD position, position, translation;
    912MOV position.z, 0.0;
    1013MOV position.w, 1.0;
  • ps/trunk/binaries/data/mods/mod/shaders/arb/canvas2d.xml

    r25603 r27136  
    55        <stream name="pos"/>
    66        <stream name="uv0"/>
    7         <uniform name="transform" loc="0" type="mat4"/>
     7        <uniform name="transform" loc="0" type="vec4"/>
     8        <uniform name="translation" loc="1" type="vec2"/>
    89    </vertex>
    910
  • ps/trunk/binaries/data/mods/mod/shaders/glsl/canvas2d.vs

    r25590 r27136  
    11#version 110
    22
    3 uniform mat4 transform;
     3uniform vec4 transform;
     4uniform vec2 translation;
    45
    56attribute vec2 a_vertex;
     
    1112{
    1213    v_uv = a_uv0;
    13     gl_Position = transform * vec4(a_vertex, 0.0, 1.0);
     14    gl_Position = , 0.0, 1.0);
    1415}
  • ps/trunk/source/graphics/Canvas2D.cpp

    r27111 r27136  
    4040{
    4141    int32_t transform;
     42
    4243    int32_t colorAdd;
    4344    int32_t colorMul;
     
    112113
    113114        BindingSlots.transform = shader->GetBindingSlot(str_transform);
     115
    114116        BindingSlots.colorAdd = shader->GetBindingSlot(str_colorAdd);
    115117        BindingSlots.colorMul = shader->GetBindingSlot(str_colorMul);
     
    118120
    119121        const CMatrix3D transform = GetTransform();
     122
     123
    120124        DeviceCommandContext->SetUniform(
    121             BindingSlots.transform, transform.AsFloatArray());
     125            BindingSlots.transform,
     126            transform._11, transform._21, transform._12, transform._22);
     127        DeviceCommandContext->SetUniform(
     128            BindingSlots.translation, Translation.AsFloatArray());
    122129    }
    123130
     
    154161    uint32_t HeightInPixels = 1;
    155162    float Scale = 1.0f;
     163
     164
    156165
    157166    Renderer::Backend::IDeviceCommandContext* DeviceCommandContext = nullptr;
     
    441450        m->BindingSlots.grayscaleFactor, 0.0f);
    442451
    443     textRenderer.Render(m->DeviceCommandContext, m->Tech->GetShader(), m->GetTransform());
     452    textRenderer.Render(
     453        m->DeviceCommandContext, m->Tech->GetShader(), m->TransformScale, m->Translation);
    444454}
    445455
  • ps/trunk/source/graphics/TextRenderer.cpp

    r26901 r27136  
    204204void CTextRenderer::Render(
    205205    Renderer::Backend::IDeviceCommandContext* deviceCommandContext,
    206     Renderer::Backend::IShaderProgram* shader, const CMatrix3D& transform)
     206    Renderer::Backend::IShaderProgram* shader,
     207    const CVector2D& transformScale, const CVector2D& translation)
    207208{
    208209    std::vector<u16> indexes;
     
    226227
    227228    const int32_t texBindingSlot = shader->GetBindingSlot(str_tex);
    228     const int32_t transformBindingSlot = shader->GetBindingSlot(str_transform);
     229    const int32_t trans);
    229230    const int32_t colorAddBindingSlot = shader->GetBindingSlot(str_colorAdd);
    230231    const int32_t colorMulBindingSlot = shader->GetBindingSlot(str_colorMul);
    231232
    232     bool transformChanged = false;
     233    bool transChanged = false;
    233234
    234235    CTexture* lastTexture = nullptr;
     
    248249        if (batch.translate.X != 0.0f || batch.translate.Y != 0.0f)
    249250        {
    250             CMatrix3D localTransform;
    251             localTransform.SetTranslation(batch.translate.X, batch.translate.Y, 0.0f);
    252             localTransform = transform * localTransform;
    253             deviceCommandContext->SetUniform(transformBindingSlot, localTransform.AsFloatArray());
    254             transformChanged = true;
     251            const CVector2D localTranslation =
     252                translation + CVector2D(batch.translate.X * transformScale.X, batch.translate.Y * transformScale.Y);
     253            deviceCommandContext->SetUniform(translationBindingSlot, localTranslation.AsFloatArray());
     254            translationChanged = true;
    255255        }
    256256
     
    347347    m_Batches.clear();
    348348
    349     if (transformChanged)
    350         deviceCommandContext->SetUniform(transformBindingSlot, transform.AsFloatArray());
    351 }
     349    if (transChanged)
     350        deviceCommandContext->SetUniform(trans.AsFloatArray());
     351}
  • ps/trunk/source/graphics/TextRenderer.h

    r26858 r27136  
    106106    void Render(
    107107        Renderer::Backend::IDeviceCommandContext* deviceCommandContext,
    108         Renderer::Backend::IShaderProgram* shader, const CMatrix3D& transform);
     108        Renderer::Backend::IShaderProgram* shader,
     109        const CVector2D& transformScale, const CVector2D& translation);
    109110
    110111private:
  • ps/trunk/source/maths/Vector2D.h

    r25152 r27136  
    1 /* Copyright (C) 2021 Wildfire Games.
     1/* Copyright (C) 202 Wildfire Games.
    22 * This file is part of 0 A.D.
    33 *
     
    1818#ifndef INCLUDED_VECTOR2D
    1919#define INCLUDED_VECTOR2D
     20
     21
    2022
    2123#include <math.h>
     
    162164    void operator-=(const CSize2D& size);
    163165
     166
     167
     168
     169
     170
     171
     172
     173
     174
     175
     176
     177
     178
    164179public:
    165180    float X, Y;
Note: See TracChangeset for help on using the changeset viewer.