Support ApplyMatrix
This commit is contained in:
parent
f6bdb30bd6
commit
e40a7b9aa7
|
@ -34,7 +34,7 @@ namespace GTETest {
|
||||||
GTE::set_trans_matrix(matrix);
|
GTE::set_trans_matrix(matrix);
|
||||||
GTE::set_rot_matrix(matrix);
|
GTE::set_rot_matrix(matrix);
|
||||||
|
|
||||||
doener_fish.apply();
|
doener_fish.apply(matrix);
|
||||||
rotation += 5_DEG;
|
rotation += 5_DEG;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,20 +17,19 @@ namespace GTETest {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
void apply() {
|
void apply(const GTE::MATRIX& matrix) {
|
||||||
static const auto apply_to = [](GTE::SVECTOR vector) -> GPU::Vertex {
|
static const auto apply_to = [](const GTE::MATRIX& matrix, GTE::SVECTOR vector) -> GPU::Vertex {
|
||||||
GTE::VECTOR output;
|
GTE::SVECTOR output;
|
||||||
int32_t flag;
|
int32_t flag;
|
||||||
|
|
||||||
GTE::rot_trans(vector, output, flag);
|
return GTE::apply_matrix(matrix, vector, output).to<GPU::Vertex>();
|
||||||
return output.to<GPU::Vertex>();
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const auto& area = this->area;
|
const auto& area = this->area;
|
||||||
this->display.vertex0 = apply_to(GTE::SVECTOR::from(area.get_top_left()));
|
this->display.vertex0 = apply_to(matrix, GTE::SVECTOR::from(area.get_top_left()));
|
||||||
this->display.vertex1 = apply_to(GTE::SVECTOR::from(area.get_top_right()));
|
this->display.vertex1 = apply_to(matrix, GTE::SVECTOR::from(area.get_top_right()));
|
||||||
this->display.vertex2 = apply_to(GTE::SVECTOR::from(area.get_bottom_left()));
|
this->display.vertex2 = apply_to(matrix, GTE::SVECTOR::from(area.get_bottom_left()));
|
||||||
this->display.vertex3 = apply_to(GTE::SVECTOR::from(area.get_bottom_right()));
|
this->display.vertex3 = apply_to(matrix, GTE::SVECTOR::from(area.get_bottom_right()));
|
||||||
}
|
}
|
||||||
|
|
||||||
void render() {
|
void render() {
|
||||||
|
|
|
@ -91,6 +91,17 @@ namespace JabyEngine {
|
||||||
__asm__ volatile("sw $12, 20(%0)" :: "r"(&matrix) : "$12", "$13", "$14");
|
__asm__ volatile("sw $12, 20(%0)" :: "r"(&matrix) : "$12", "$13", "$14");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
ApplyMatrix
|
||||||
|
m0: Matrix to apply
|
||||||
|
v0: Vector to apply to
|
||||||
|
v1: Result
|
||||||
|
returns: result
|
||||||
|
|
||||||
|
Applies the matrix to the vector
|
||||||
|
*/
|
||||||
|
SVECTOR& apply_matrix(const MATRIX& m0, const SVECTOR& v0, SVECTOR& v1);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
MulMatrix0
|
MulMatrix0
|
||||||
|
|
||||||
|
|
|
@ -55,6 +55,17 @@ namespace JabyEngine {
|
||||||
__asm__ volatile("swc2 $27, 8(%0)" :: "r"(&out_vector) : "memory");
|
__asm__ volatile("swc2 $27, 8(%0)" :: "r"(&out_vector) : "memory");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Modify to store in VERTEX?
|
||||||
|
// Store SVECTOR from 16 bit universal register
|
||||||
|
static __always_inline void stsv(SVECTOR& out_vector) {
|
||||||
|
__asm__ volatile("mfc2 $12, $9" :: "r"(&out_vector) : "$12", "$13", "$14", "memory");
|
||||||
|
__asm__ volatile("mfc2 $13, $10" :: "r"(&out_vector) : "$12", "$13", "$14", "memory");
|
||||||
|
__asm__ volatile("mfc2 $14, $11" :: "r"(&out_vector) : "$12", "$13", "$14", "memory");
|
||||||
|
__asm__ volatile("sh $12, 0(%0)" :: "r"(&out_vector) : "$12", "$13", "$14", "memory");
|
||||||
|
__asm__ volatile("sh $13, 2(%0)" :: "r"(&out_vector) : "$12", "$13", "$14", "memory");
|
||||||
|
__asm__ volatile("sh $14, 4(%0)" :: "r"(&out_vector) : "$12", "$13", "$14", "memory");
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Kernel of RotTrans
|
Kernel of RotTrans
|
||||||
(Transfer vector)+(Rotation Matrix)*(vertex register 0)
|
(Transfer vector)+(Rotation Matrix)*(vertex register 0)
|
||||||
|
@ -65,6 +76,16 @@ namespace JabyEngine {
|
||||||
__asm__ volatile("cop2 0x0480012");
|
__asm__ volatile("cop2 0x0480012");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Variation of gte_rt
|
||||||
|
(Rotation Matrix)*(vertex register 0).
|
||||||
|
*/
|
||||||
|
static __always_inline void rtv0() {
|
||||||
|
__asm__ volatile("nop;");
|
||||||
|
__asm__ volatile("nop;");
|
||||||
|
__asm__ volatile("cop2 0x0486012;");
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Variation of gte_rt
|
Variation of gte_rt
|
||||||
(Rotation Matrix)*(16 bit universal vector)
|
(Rotation Matrix)*(16 bit universal vector)
|
||||||
|
|
|
@ -43,6 +43,16 @@ namespace JabyEngine {
|
||||||
static MATRIX Stack[StackSize];
|
static MATRIX Stack[StackSize];
|
||||||
static MATRIX* FreeStackEntry = Stack;
|
static MATRIX* FreeStackEntry = Stack;
|
||||||
|
|
||||||
|
SVECTOR& apply_matrix(const MATRIX& m0, const SVECTOR& v0, SVECTOR& v1) {
|
||||||
|
// TODO: Do we want to push here?
|
||||||
|
set_rot_matrix(m0);
|
||||||
|
|
||||||
|
JabyEngine::GTE::ldv0(v0);
|
||||||
|
JabyEngine::GTE::rtv0();
|
||||||
|
JabyEngine::GTE::stsv(v1);
|
||||||
|
return v1;
|
||||||
|
}
|
||||||
|
|
||||||
MATRIX& multiply_matrix(const MATRIX& m0, const MATRIX& m1, MATRIX& result) {
|
MATRIX& multiply_matrix(const MATRIX& m0, const MATRIX& m1, MATRIX& result) {
|
||||||
set_rot_matrix(m0);
|
set_rot_matrix(m0);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue