mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2025-12-24 00:03:11 +01:00
Implement sprite batch drawing using instancing
This commit is contained in:
@@ -1,12 +1,13 @@
|
||||
#version 150
|
||||
|
||||
uniform ivec4 uClip;
|
||||
uniform int uFlags;
|
||||
uniform vec4 uColour;
|
||||
uniform usampler2DArray uTexture;
|
||||
uniform vec4 uPalette[256];
|
||||
uniform vec2 uTexCoordScale;
|
||||
uniform int uTexSlot;
|
||||
uniform usampler2DArray uTexture;
|
||||
|
||||
flat in ivec4 fClip;
|
||||
flat in int fFlags;
|
||||
in vec4 fColour;
|
||||
in vec2 fTexCoordScale;
|
||||
flat in int fTexSlot;
|
||||
|
||||
in vec2 fPosition;
|
||||
in vec2 fTextureCoordinate;
|
||||
@@ -15,16 +16,16 @@ out vec4 oColour;
|
||||
|
||||
void main()
|
||||
{
|
||||
if (fPosition.x < uClip.x || fPosition.x > uClip.z ||
|
||||
fPosition.y < uClip.y || fPosition.y > uClip.w)
|
||||
if (fPosition.x < fClip.x || fPosition.x > fClip.z ||
|
||||
fPosition.y < fClip.y || fPosition.y > fClip.w)
|
||||
{
|
||||
discard;
|
||||
}
|
||||
|
||||
vec4 texel = uPalette[texture(uTexture, vec3(fTextureCoordinate * uTexCoordScale, float(uTexSlot))).r];
|
||||
if ((uFlags & 1) != 0)
|
||||
vec4 texel = uPalette[texture(uTexture, vec3(fTextureCoordinate * fTexCoordScale, float(fTexSlot))).r];
|
||||
if ((fFlags & 1) != 0)
|
||||
{
|
||||
oColour = vec4(uColour.rgb, uColour.a * texel.a);
|
||||
oColour = vec4(fColour.rgb, fColour.a * texel.a);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -1,32 +1,43 @@
|
||||
#version 150
|
||||
|
||||
uniform ivec2 uScreenSize;
|
||||
uniform ivec4 uBounds;
|
||||
uniform ivec4 uTextureCoordinates;
|
||||
|
||||
in ivec4 ivClip;
|
||||
in vec2 ivTexCoordScale;
|
||||
in int ivTexSlot;
|
||||
in int ivFlags;
|
||||
in vec4 ivColour;
|
||||
in ivec4 ivBounds;
|
||||
|
||||
in uint vIndex;
|
||||
|
||||
out vec2 fPosition;
|
||||
out vec2 fTextureCoordinate;
|
||||
out vec2 fTextureCoordinate;
|
||||
out vec2 fPosition;
|
||||
flat out ivec4 fClip;
|
||||
flat out int fFlags;
|
||||
out vec4 fColour;
|
||||
out vec2 fTexCoordScale;
|
||||
flat out int fTexSlot;
|
||||
|
||||
void main()
|
||||
{
|
||||
vec2 pos;
|
||||
switch (vIndex) {
|
||||
case 0u:
|
||||
pos = uBounds.xy;
|
||||
pos = ivBounds.xy;
|
||||
fTextureCoordinate = uTextureCoordinates.xy;
|
||||
break;
|
||||
case 1u:
|
||||
pos = uBounds.zy;
|
||||
pos = ivBounds.zy;
|
||||
fTextureCoordinate = uTextureCoordinates.zy;
|
||||
break;
|
||||
case 2u:
|
||||
pos = uBounds.xw;
|
||||
pos = ivBounds.xw;
|
||||
fTextureCoordinate = uTextureCoordinates.xw;
|
||||
break;
|
||||
case 3u:
|
||||
pos = uBounds.zw;
|
||||
pos = ivBounds.zw;
|
||||
fTextureCoordinate = uTextureCoordinates.zw;
|
||||
break;
|
||||
}
|
||||
@@ -38,5 +49,11 @@ void main()
|
||||
pos.y = (pos.y * (2.0 / uScreenSize.y)) - 1.0;
|
||||
pos.y *= -1;
|
||||
|
||||
fClip = ivClip;
|
||||
fFlags = ivFlags;
|
||||
fColour = ivColour;
|
||||
fTexCoordScale = ivTexCoordScale;
|
||||
fTexSlot = ivTexSlot;
|
||||
|
||||
gl_Position = vec4(pos, 0.0, 1.0);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user