mirror of
https://github.com/love2d/love.git
synced 2026-08-15 07:41:11 +02:00
Update naming convention for builtin shader matrices.
- ClipSpaceFromLocal replaces TransformProjectionMatrix - ViewSpaceFromLocal replaces TransformMatrix - ClipSpaceFromView replaces ProjectionMatrix - ViewNormalFromLocal replaces NormalMatrix --HG-- branch : minor
This commit is contained in:
@@ -351,16 +351,16 @@ StringMap<Shader::ShaderStage, Shader::STAGE_MAX_ENUM> Shader::stageNames(Shader
|
||||
|
||||
StringMap<Shader::BuiltinUniform, Shader::BUILTIN_MAX_ENUM>::Entry Shader::builtinNameEntries[] =
|
||||
{
|
||||
{ "MainTex", BUILTIN_TEXTURE_MAIN },
|
||||
{ "love_VideoYChannel", BUILTIN_TEXTURE_VIDEO_Y },
|
||||
{ "love_VideoCbChannel", BUILTIN_TEXTURE_VIDEO_CB },
|
||||
{ "love_VideoCrChannel", BUILTIN_TEXTURE_VIDEO_CR },
|
||||
{ "TransformMatrix", BUILTIN_MATRIX_TRANSFORM },
|
||||
{ "ProjectionMatrix", BUILTIN_MATRIX_PROJECTION },
|
||||
{ "TransformProjectionMatrix", BUILTIN_MATRIX_TRANSFORM_PROJECTION },
|
||||
{ "NormalMatrix", BUILTIN_MATRIX_NORMAL },
|
||||
{ "love_PointSize", BUILTIN_POINT_SIZE },
|
||||
{ "love_ScreenSize", BUILTIN_SCREEN_SIZE },
|
||||
{ "MainTex", BUILTIN_TEXTURE_MAIN },
|
||||
{ "love_VideoYChannel", BUILTIN_TEXTURE_VIDEO_Y },
|
||||
{ "love_VideoCbChannel", BUILTIN_TEXTURE_VIDEO_CB },
|
||||
{ "love_VideoCrChannel", BUILTIN_TEXTURE_VIDEO_CR },
|
||||
{ "ViewSpaceFromLocal", BUILTIN_MATRIX_VIEW_FROM_LOCAL },
|
||||
{ "ClipSpaceFromView", BUILTIN_MATRIX_CLIP_FROM_VIEW },
|
||||
{ "ClipSpaceFromLocal", BUILTIN_MATRIX_CLIP_FROM_LOCAL },
|
||||
{ "ViewNormalFromLocal", BUILTIN_MATRIX_VIEW_NORMAL_FROM_LOCAL },
|
||||
{ "love_PointSize", BUILTIN_POINT_SIZE },
|
||||
{ "love_ScreenSize", BUILTIN_SCREEN_SIZE },
|
||||
};
|
||||
|
||||
StringMap<Shader::BuiltinUniform, Shader::BUILTIN_MAX_ENUM> Shader::builtinNames(Shader::builtinNameEntries, sizeof(Shader::builtinNameEntries));
|
||||
|
||||
@@ -73,10 +73,10 @@ public:
|
||||
BUILTIN_TEXTURE_VIDEO_Y,
|
||||
BUILTIN_TEXTURE_VIDEO_CB,
|
||||
BUILTIN_TEXTURE_VIDEO_CR,
|
||||
BUILTIN_MATRIX_TRANSFORM,
|
||||
BUILTIN_MATRIX_PROJECTION,
|
||||
BUILTIN_MATRIX_TRANSFORM_PROJECTION,
|
||||
BUILTIN_MATRIX_NORMAL,
|
||||
BUILTIN_MATRIX_VIEW_FROM_LOCAL,
|
||||
BUILTIN_MATRIX_CLIP_FROM_VIEW,
|
||||
BUILTIN_MATRIX_CLIP_FROM_LOCAL,
|
||||
BUILTIN_MATRIX_VIEW_NORMAL_FROM_LOCAL,
|
||||
BUILTIN_POINT_SIZE,
|
||||
BUILTIN_SCREEN_SIZE,
|
||||
BUILTIN_MAX_ENUM
|
||||
|
||||
@@ -855,14 +855,14 @@ void Shader::updateBuiltinUniforms()
|
||||
// Only upload the matrices if they've changed.
|
||||
if (memcmp(curxform.getElements(), lastTransformMatrix.getElements(), sizeof(float) * 16) != 0)
|
||||
{
|
||||
GLint location = builtinUniforms[BUILTIN_MATRIX_TRANSFORM];
|
||||
GLint location = builtinUniforms[BUILTIN_MATRIX_VIEW_FROM_LOCAL];
|
||||
if (location >= 0)
|
||||
glUniformMatrix4fv(location, 1, GL_FALSE, curxform.getElements());
|
||||
|
||||
// Also upload the re-calculated normal matrix, if possible. The normal
|
||||
// matrix is the transpose of the inverse of the rotation portion
|
||||
// (top-left 3x3) of the transform matrix.
|
||||
location = builtinUniforms[BUILTIN_MATRIX_NORMAL];
|
||||
location = builtinUniforms[BUILTIN_MATRIX_VIEW_NORMAL_FROM_LOCAL];
|
||||
if (location >= 0)
|
||||
{
|
||||
Matrix3 normalmatrix = Matrix3(curxform).transposedInverse();
|
||||
@@ -875,7 +875,7 @@ void Shader::updateBuiltinUniforms()
|
||||
|
||||
if (memcmp(curproj.getElements(), lastProjectionMatrix.getElements(), sizeof(float) * 16) != 0)
|
||||
{
|
||||
GLint location = builtinUniforms[BUILTIN_MATRIX_PROJECTION];
|
||||
GLint location = builtinUniforms[BUILTIN_MATRIX_CLIP_FROM_VIEW];
|
||||
if (location >= 0)
|
||||
glUniformMatrix4fv(location, 1, GL_FALSE, curproj.getElements());
|
||||
|
||||
@@ -885,7 +885,7 @@ void Shader::updateBuiltinUniforms()
|
||||
|
||||
if (tpmatrixneedsupdate)
|
||||
{
|
||||
GLint location = builtinUniforms[BUILTIN_MATRIX_TRANSFORM_PROJECTION];
|
||||
GLint location = builtinUniforms[BUILTIN_MATRIX_CLIP_FROM_LOCAL];
|
||||
if (location >= 0)
|
||||
{
|
||||
Matrix4 tp_matrix(curproj, curxform);
|
||||
|
||||
@@ -72,11 +72,18 @@ GLSL.UNIFORMS = [[
|
||||
// According to the GLSL ES 1.0 spec, uniform precision must match between stages,
|
||||
// but we can't guarantee that highp is always supported in fragment shaders...
|
||||
// We *really* don't want to use mediump for these in vertex shaders though.
|
||||
uniform LOVE_HIGHP_OR_MEDIUMP mat4 TransformMatrix;
|
||||
uniform LOVE_HIGHP_OR_MEDIUMP mat4 ProjectionMatrix;
|
||||
uniform LOVE_HIGHP_OR_MEDIUMP mat4 TransformProjectionMatrix;
|
||||
uniform LOVE_HIGHP_OR_MEDIUMP mat3 NormalMatrix;
|
||||
uniform LOVE_HIGHP_OR_MEDIUMP vec4 love_ScreenSize;]]
|
||||
uniform LOVE_HIGHP_OR_MEDIUMP mat4 ViewSpaceFromLocal;
|
||||
uniform LOVE_HIGHP_OR_MEDIUMP mat4 ClipSpaceFromView;
|
||||
uniform LOVE_HIGHP_OR_MEDIUMP mat4 ClipSpaceFromLocal;
|
||||
uniform LOVE_HIGHP_OR_MEDIUMP mat3 ViewNormalFromLocal;
|
||||
uniform LOVE_HIGHP_OR_MEDIUMP vec4 love_ScreenSize;
|
||||
|
||||
// Compatibility
|
||||
#define TransformMatrix ViewSpaceFromLocal
|
||||
#define ProjectionMatrix ClipSpaceFromView
|
||||
#define TransformProjectionMatrix ClipSpaceFromLocal
|
||||
#define NormalMatrix ViewNormalFromLocal
|
||||
]]
|
||||
|
||||
GLSL.FUNCTIONS = [[
|
||||
#ifdef GL_ES
|
||||
@@ -222,13 +229,13 @@ attribute vec4 ConstantColor;
|
||||
varying vec4 VaryingTexCoord;
|
||||
varying vec4 VaryingColor;
|
||||
|
||||
vec4 position(mat4 transform_proj, vec4 vertpos);
|
||||
vec4 position(mat4 clipSpaceFromLocal, vec4 localPosition);
|
||||
|
||||
void main() {
|
||||
VaryingTexCoord = VertexTexCoord;
|
||||
VaryingColor = gammaCorrectColor(VertexColor) * ConstantColor;
|
||||
setPointSize();
|
||||
love_Position = position(TransformProjectionMatrix, VertexPosition);
|
||||
love_Position = position(ClipSpaceFromLocal, VertexPosition);
|
||||
}]],
|
||||
}
|
||||
|
||||
@@ -424,8 +431,8 @@ end
|
||||
|
||||
local defaultcode = {
|
||||
vertex = [[
|
||||
vec4 position(mat4 transform_proj, vec4 vertpos) {
|
||||
return transform_proj * vertpos;
|
||||
vec4 position(mat4 clipSpaceFromLocal, vec4 localPosition) {
|
||||
return clipSpaceFromLocal * localPosition;
|
||||
}]],
|
||||
pixel = [[
|
||||
vec4 effect(vec4 vcolor, Image tex, vec2 texcoord, vec2 pixcoord) {
|
||||
|
||||
Reference in New Issue
Block a user