使用C和Win32,我想知道如何实现用于加载资源(纹理和VBO)的辅助OpenGL线程.
从我发现的,这应该用wglShareLists()来完成,但我不确定如何设置辅助线程:
我是否需要新的设备上下文或仅需要新的渲染上下文?
我需要调用哪些wgl函数?
我正在尝试使用汇编(ARM)宏进行定点乘法:
#define MULT(a,b) __asm__ __volatile__ ( \
"SMULL r2, r3, %0, %1\n\t" \
"ADD r2, r2, #0x8000\n\t" \
"ADC r3, r3, #0\n\t" \
"MOV %0, r2, ASR#16\n\t" \
"ORR %0, %0, r3, ASL#16" \
: "=r" (a) : "0"(a), "1"(b) : "r2", "r3" );
Run Code Online (Sandbox Code Playgroud)
但在尝试编译时,我得到错误:' asm ' 之前的预期表达式
(你可以忽略下面的所有内容,如果你重视你的时间,但如果你看看它会很好,这里的主要问题是如何进行上述工作)
我试过这个:
static inline GLfixed MULT(GLfixed a, GLfixed b){
asm volatile(
"SMULL r2, r3, %[a], %[b]\n"
"ADD r2, r2, #0x8000\n"
"ADC r3, r3, #0\n"
"MOV %[a], r2, ASR#16\n"
"ORR %[a], %[a], r3, …Run Code Online (Sandbox Code Playgroud) 我正在寻找固定点16.16数字的最佳逆平方根算法。到目前为止,下面的代码是我所拥有的(但是基本上,它取平方根并除以原始数,我想得到不除数的平方根倒数)。如果更改了任何内容,则将为armv5te编译代码。
uint32_t INVSQRT(uint32_t n)
{
uint64_t op, res, one;
op = ((uint64_t)n<<16);
res = 0;
one = (uint64_t)1 << 46;
while (one > op) one >>= 2;
while (one != 0)
{
if (op >= res + one)
{
op -= (res + one);
res += (one<<1);
}
res >>= 1;
one >>= 2;
}
res<<=16;
res /= n;
return(res);
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试用 GLSL 做骨骼动画。对于每个骨骼,我有一个平移(x,y,z)和一个旋转(俯仰,滚动,偏航)(以度为单位)。我可以为每个骨骼构造一个 4x4 矩阵,但这会在着色器中占用大量寄存器空间,所以我只想存储每个骨骼的 6 个值,但我不知道如何做到这一点。