// Copyright (C) 2003-2008 Dolphin Project. // 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, version 2.0. // 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 2.0 for more details. // A copy of the GPL 2.0 should have been included with the program. // If not, see http://www.gnu.org/licenses/ // Official SVN repository and contact information can be found at // http://code.google.com/p/dolphin-emu/ #include "stdafx.h" #include "D3DShader.h" #include "VertexShader.h" #include "BPStructs.h" static const char *genericVS = "// Generic Vertex Shader\ \n\ struct VS_INPUT {\n\ float4 pos : POSITION;\n\ float3 normal : NORMAL;\n\ float4 colors[2] : COLOR0;\n\ float3 uv[8] : TEXCOORD0;\n\ };\n\ \n\ struct VS_OUTPUT {\n\ float4 pos : POSITION;\n\ float4 colors[2] : COLOR0;\n\ //numtexgen\n\ float4 uv[5] : TEXCOORD0;\n\ };\n\ \n\ uniform matrix matWorldViewProj : register(c0);\n\ \n\ VS_OUTPUT main(const VS_INPUT input)\n\ {\n\ VS_OUTPUT output;\n\ \n\ output.pos = mul(matWorldViewProj, input.pos);\n\ // texgen\n\ for (int i=0; i<5; i++)\n\ output.uv[i] = float4(input.uv[i].xyz,1);\n\ \n\ for (int i=0; i<2; i++)\n output.colors[i] = input.colors[i];\n\ return output;\n\ }\0"; const char *GenerateVertexShader() { return genericVS; } /* char text2[65536]; #define WRITE p+=sprintf void WriteTexgen(char *&p, int n); const char *GenerateVertexShader() { int numColors = 2; int numUV = 8; int numTexgen = bpmem.genMode.numtexgens; int numNormals = 3; bool fogEnable = false; bool hasNormal = true; char *p = text2; WRITE(p,"//Vertex Shader\n"); WRITE(p,"//%i uv->%i texgens, %i colors\n",numUV,numTexgen,numColors); WRITE(p,"\n"); WRITE(p,"struct VS_INPUT {\n"); WRITE(p," float4 pos : POSITION;\n"); WRITE(p," float3 normal : NORMAL;\n"); if (numColors) WRITE(p," float4 colors[%i] : COLOR0;\n",numColors); if (numUV) WRITE(p," float3 uv[%i] : TEXCOORD0;\n",numUV); WRITE(p,"};\n"); WRITE(p,"\n"); WRITE(p,"struct VS_OUTPUT {\n"); WRITE(p," float4 pos : POSITION;\n"); WRITE(p," float4 colors[%i] : COLOR0;\n",numColors); if (numTexgen) WRITE(p," float4 uv[%i] : TEXCOORD0;\n",numTexgen); if (fogEnable) WRITE(p," float fog : FOG;\n",numTexgen); WRITE(p,"};\n"); WRITE(p,"\n"); WRITE(p,"uniform matrix matWorldViewProj : register(c0);\n"); WRITE(p,"\n"); WRITE(p,"VS_OUTPUT main(const VS_INPUT input)\n"); WRITE(p,"{\n"); WRITE(p," VS_OUTPUT output;"); WRITE(p,"\n"); WRITE(p," output.pos = mul(matWorldViewProj, input.pos);\n"); for (int i = 0; i < (int)bpmem.genMode.numtexgens; i++) { //build the equation for this stage WriteTexgen(p,i); } WRITE(p," for (int i=0; i<2; i++)\n output.colors[i] = input.colors[i];\n"); //WRITE(p," output.fog = 0.0f;"); WRITE(p,"return output;\n"); WRITE(p,"}\n"); WRITE(p,"\0"); // MessageBox(0,text2,0,0); return text2; } /* * xform->vertexshader ideas *//* void WriteTexgen(char *&p, int n) { WRITE(p," output.uv[%i] = float4(input.uv[%i].xy,0,input.uv[%i].z);\n",n,n,n); } void WriteLight(int color, int component) { } */