softgpu: Use vertType prim override for flags.

These parameters are a real shame, was so clean before...
This commit is contained in:
Unknown W. Brackets 2022-09-06 19:45:03 -07:00
parent f274267143
commit 7a83f8bab5
9 changed files with 22 additions and 19 deletions

View file

@ -202,11 +202,11 @@ struct TransformState {
};
void ComputeTransformState(TransformState *state, const VertexReader &vreader) {
state->enableTransform = !gstate.isModeThrough();
state->enableTransform = !vreader.isThrough();
state->enableLighting = gstate.isLightingEnabled();
state->enableFog = gstate.isFogEnabled();
state->readUV = !gstate.isModeClear() && gstate.isTextureMapEnabled() && vreader.hasUV();
state->readWeights = vertTypeIsSkinningEnabled(gstate.vertType) && state->enableTransform;
state->readWeights = vreader.skinningEnabled() && state->enableTransform;
state->negateNormals = gstate.areNormalsReversed();
state->uvGenMode = gstate.getUVGenMode();
@ -302,7 +302,7 @@ VertexData TransformUnit::ReadVertex(VertexReader &vreader, const TransformState
Vec3<float> tmppos(0.f, 0.f, 0.f);
Vec3<float> tmpnrm(0.f, 0.f, 0.f);
for (int i = 0; i < vertTypeGetNumBoneWeights(gstate.vertType); ++i) {
for (int i = 0; i < vreader.numBoneWeights(); ++i) {
Vec3<float> step = Vec3ByMatrix43(pos, gstate.boneMatrix + i * 12);
tmppos += step * W[i];
if (vreader.hasNormal()) {
@ -506,7 +506,7 @@ void TransformUnit::SubmitPrimitive(const void* vertices, const void* indices, G
// TODO: Do this in two passes - first process the vertices (before indexing/stripping),
// then resolve the indices. This lets us avoid transforming shared vertices twice.
binner_->UpdateState();
binner_->UpdateState(vreader.isThrough());
static TransformState transformState;
if (binner_->HasDirty(SoftDirty::LIGHT_ALL | SoftDirty::TRANSFORM_ALL)) {
@ -595,7 +595,7 @@ void TransformUnit::SubmitPrimitive(const void* vertices, const void* indices, G
}
}
if (data_index == 4 && gstate.isModeThrough() && cullType == CullType::OFF) {
if (data_index == 4 && vreader.isThrough() && cullType == CullType::OFF) {
if (Rasterizer::DetectRectangleThroughModeSlices(binner_->State(), data)) {
data[1] = data[3];
data_index = 2;