Pica: Use zero for the SecondaryFragmentColor source.

- This is a workaround until we support fragment lighting.
This commit is contained in:
bunnei 2015-05-25 18:45:05 -04:00
parent dcbc653b90
commit 33b9abb91e
3 changed files with 21 additions and 11 deletions

View File

@ -240,6 +240,7 @@ struct Regs {
enum class Source : u32 { enum class Source : u32 {
PrimaryColor = 0x0, PrimaryColor = 0x0,
PrimaryFragmentColor = 0x1, PrimaryFragmentColor = 0x1,
SecondaryFragmentColor = 0x2,
Texture0 = 0x3, Texture0 = 0x3,
Texture1 = 0x4, Texture1 = 0x4,

View File

@ -402,11 +402,16 @@ static void ProcessTriangleInternal(const VertexShader::OutputVertex& v0,
auto GetSource = [&](Source source) -> Math::Vec4<u8> { auto GetSource = [&](Source source) -> Math::Vec4<u8> {
switch (source) { switch (source) {
// TODO: What's the difference between these two?
case Source::PrimaryColor: case Source::PrimaryColor:
// HACK: Until we implement fragment lighting, use primary_color
case Source::PrimaryFragmentColor: case Source::PrimaryFragmentColor:
return primary_color; return primary_color;
// HACK: Until we implement fragment lighting, use zero
case Source::SecondaryFragmentColor:
return {0, 0, 0, 0};
case Source::Texture0: case Source::Texture0:
return texture_color[0]; return texture_color[0];

View File

@ -69,15 +69,16 @@ const char g_fragment_shader_hw[] = R"(
#define NUM_VTX_ATTR 7 #define NUM_VTX_ATTR 7
#define NUM_TEV_STAGES 6 #define NUM_TEV_STAGES 6
#define SOURCE_PRIMARYCOLOR 0x0 #define SOURCE_PRIMARYCOLOR 0x0
#define SOURCE_PRIMARYFRAGMENTCOLOR 0x1 #define SOURCE_PRIMARYFRAGMENTCOLOR 0x1
#define SOURCE_TEXTURE0 0x3 #define SOURCE_SECONDARYFRAGMENTCOLOR 0x2
#define SOURCE_TEXTURE1 0x4 #define SOURCE_TEXTURE0 0x3
#define SOURCE_TEXTURE2 0x5 #define SOURCE_TEXTURE1 0x4
#define SOURCE_TEXTURE3 0x6 #define SOURCE_TEXTURE2 0x5
#define SOURCE_PREVIOUSBUFFER 0xd #define SOURCE_TEXTURE3 0x6
#define SOURCE_CONSTANT 0xe #define SOURCE_PREVIOUSBUFFER 0xd
#define SOURCE_PREVIOUS 0xf #define SOURCE_CONSTANT 0xe
#define SOURCE_PREVIOUS 0xf
#define COLORMODIFIER_SOURCECOLOR 0x0 #define COLORMODIFIER_SOURCECOLOR 0x0
#define COLORMODIFIER_ONEMINUSSOURCECOLOR 0x1 #define COLORMODIFIER_ONEMINUSSOURCECOLOR 0x1
@ -151,8 +152,11 @@ vec4 GetSource(int source) {
if (source == SOURCE_PRIMARYCOLOR) { if (source == SOURCE_PRIMARYCOLOR) {
return o[2]; return o[2];
} else if (source == SOURCE_PRIMARYFRAGMENTCOLOR) { } else if (source == SOURCE_PRIMARYFRAGMENTCOLOR) {
// HACK: Uses color value, but should really use fragment lighting output // HACK: Until we implement fragment lighting, use primary_color
return o[2]; return o[2];
} else if (source == SOURCE_SECONDARYFRAGMENTCOLOR) {
// HACK: Until we implement fragment lighting, use zero
return vec4(0.0, 0.0, 0.0, 0.0);
} else if (source == SOURCE_TEXTURE0) { } else if (source == SOURCE_TEXTURE0) {
return texture(tex[0], o[3].xy); return texture(tex[0], o[3].xy);
} else if (source == SOURCE_TEXTURE1) { } else if (source == SOURCE_TEXTURE1) {