dosbox-x/shaders/scaling.inc

174 lines
3.9 KiB
C++

/*
Copyright (C) 2003 Ryan A. Nunn
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
//
// Matrix Definitions for Scaler Effects
//
matrix World : WORLD;
matrix View : VIEW;
matrix Projection : PROJECTION;
matrix Worldview : WORLDVIEW; // world * view
matrix ViewProjection : VIEWPROJECTION; // view * projection
matrix WorldViewProjection : WORLDVIEWPROJECTION; // world * view * projection
//
// Source Texture Definition for Scaler Effects
//
// Image Dimentions
float2 SourceDims : SOURCEDIMS = 256.0F;
// Size of one Texel
float2 TexelSize : TEXELSIZE = 1.0F/256.0F;
//
// Source Texture
//
texture SourceTexture : SOURCETEXTURE;
sampler SourceSampler = sampler_state {
Texture = (SourceTexture);
MinFilter = POINT;
MagFilter = POINT;
MipFilter = NONE;
AddressU = Clamp;
AddressV = Clamp;
SRGBTEXTURE = FALSE;
};
sampler BilinearSourceSampler = sampler_state {
Texture = (SourceTexture);
MinFilter = LINEAR;
MagFilter = LINEAR;
MipFilter = NONE;
AddressU = Clamp;
AddressV = Clamp;
SRGBTEXTURE = FALSE;
};
sampler SRGBSourceSampler = sampler_state {
Texture = (SourceTexture);
MinFilter = POINT;
MagFilter = POINT;
MipFilter = NONE;
AddressU = Clamp;
AddressV = Clamp;
SRGBTEXTURE = TRUE;
};
sampler SRGBBilinearSourceSampler = sampler_state {
Texture = (SourceTexture);
MinFilter = LINEAR;
MagFilter = LINEAR;
MipFilter = NONE;
AddressU = Clamp;
AddressV = Clamp;
SRGBTEXTURE = TRUE;
};
//
// Working Texture and Working RenderTarget
// Same Dims as Source Texture
//
texture WorkingTexture : WORKINGTEXTURE;
sampler WorkingSampler = sampler_state {
Texture = (WorkingTexture);
MinFilter = POINT;
MagFilter = POINT;
MipFilter = NONE;
AddressU = Clamp;
AddressV = Clamp;
SRGBTEXTURE = FALSE;
};
texture WorkingTexture1 : WORKINGTEXTURE1;
sampler WorkingSampler1 = sampler_state {
Texture = (WorkingTexture1);
MinFilter = POINT;
MagFilter = POINT;
MipFilter = NONE;
AddressU = Clamp;
AddressV = Clamp;
SRGBTEXTURE = FALSE;
};
//
// procedural textures that selects which pixel to generate
//
texture OutputSelectTexture
<
string function = "GenerateOutputSelect"; // Function to generate from
int width = 2;
int height = 2;
>;
// TextureShader for the OutputSelectTexture
float4 GenerateOutputSelect(float3 Pos : POSITION) : COLOR
{
float4 ret = (float4)1;
if (Pos.x < 0.5 && Pos.y < 0.5) ret[0] = 0;
else if (Pos.y < 0.5) ret[1] = 0;
else if (Pos.x < 0.5) ret[2] = 0;
else ret[3] = 0;
return ret;
}
// Sampler for the OutputSelectTexture
sampler OutputSelectSampler = sampler_state
{
Texture = (OutputSelectTexture);
MinFilter = POINT;
MagFilter = POINT;
MipFilter = NONE;
AddressU = WRAP;
AddressV = WRAP;
SRGBTEXTURE = FALSE;
};
//
// A Simple Texture that can do a modulo (or frac) by a lookup, rather than by
// using a arithmetic instruction. Not entirely accurate
//
texture ModuloTexture
<
string function = "GenerateModulo"; // Function to generate from
int width = 16;
int height = 16;
>;
// TextureShader for the ModuloTexture
float4 GenerateModulo(float3 Pos : POSITION) : COLOR
{
return float4(Pos.x, Pos.y, 0, 0);
}
// Sampler for the ModuloTexture
sampler ModuloSampler = sampler_state
{
Texture = (ModuloTexture);
MinFilter = POINT;
MagFilter = POINT;
MipFilter = NONE;
AddressU = WRAP;
AddressV = WRAP;
SRGBTEXTURE = FALSE;
};