From 1a0ccf6a922fdf971d079ea57540a593ca67c89c Mon Sep 17 00:00:00 2001 From: Bill Currie Date: Thu, 26 Apr 2012 10:29:21 +0900 Subject: [PATCH] Add vec = quat * vec to the progs engine. --- include/QF/pr_comp.h | 3 ++- libs/gamecode/pr_exec.c | 3 +++ libs/gamecode/pr_opcode.c | 4 ++++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/include/QF/pr_comp.h b/include/QF/pr_comp.h index 15e059a01..a77de136e 100644 --- a/include/QF/pr_comp.h +++ b/include/QF/pr_comp.h @@ -270,6 +270,7 @@ typedef enum { OP_MUL_Q, OP_MUL_QF, OP_MUL_FQ, + OP_MUL_QV, OP_CONJ_Q, OP_NOT_Q, OP_EQ_Q, @@ -362,7 +363,7 @@ typedef struct pr_va_list_s { |(((0x##b) & 0xfff) << 12) \ |(((0x##c) & 0xfff) << 0) ) #define PROG_ID_VERSION 6 -#define PROG_VERSION PROG_VERSION_ENCODE(0,fff,008) +#define PROG_VERSION PROG_VERSION_ENCODE(0,fff,009) typedef struct dprograms_s { pr_uint_t version; diff --git a/libs/gamecode/pr_exec.c b/libs/gamecode/pr_exec.c index 3ff0a094e..5a6ab01c4 100644 --- a/libs/gamecode/pr_exec.c +++ b/libs/gamecode/pr_exec.c @@ -431,6 +431,9 @@ PR_ExecuteProgram (progs_t * pr, func_t fnum) case OP_MUL_Q: QuatMult (OPA.quat_var, OPB.quat_var, OPC.quat_var); break; + case OP_MUL_QV: + QuatMultVec (OPA.quat_var, OPB.vector_var, OPC.vector_var); + break; case OP_MUL_FQ: QuatScale (OPB.quat_var, OPA.float_var, OPC.quat_var); break; diff --git a/libs/gamecode/pr_opcode.c b/libs/gamecode/pr_opcode.c index 9cbdbf172..f536c2895 100644 --- a/libs/gamecode/pr_opcode.c +++ b/libs/gamecode/pr_opcode.c @@ -128,6 +128,10 @@ VISIBLE opcode_t pr_opcodes[] = { ev_quat, ev_float, ev_quat, PROG_VERSION, }, + {"*", "mul.qv", OP_MUL_QV, false, + ev_quat, ev_vector, ev_vector, + PROG_VERSION, + }, {"~", "conj.q", OP_CONJ_Q, false, ev_quat, ev_invalid, ev_quat,