小编use*_*005的帖子

gcc/g ++是如何引导的?

这一直困扰着我.gcc/g ++如何编译自己?我猜测每个修订版都使用以前构建的修订版进行编译.这是真的?如果是的话,是否意味着最古老的g ++/gcc版本是用汇编语言编写的?

c c++ compiler-construction

182
推荐指数
2
解决办法
2万
查看次数

为什么CPU分支指令慢?

自从我开始编程以来,我已经在每个地方阅读,以避免不惜一切代价浪费分支机构.

这很好,虽然没有一篇文章解释了为什么我应该这样做.CPU解码分支指令并决定跳转时到底发生了什么?什么是"东西"使它比其他指令(如添加)慢?

language-agnostic architecture compiler-construction cpu optimization

30
推荐指数
2
解决办法
9164
查看次数

与GL_MAX_TEXTURE_SIZE混淆

我想知道GL_MAX_TEXTURE_SIZE变量是否返回一个轴的纹理像素尺寸或两者都加起来(x,y).

例如,在我的电脑上我得到了8192.这是否意味着我可以加载8192*8192*4(256mb)或4096*4096*4(64mb)的纹理?如果是这样,为什么当我的显卡有1GB的视频内存时会发生这种情况?

opengl graphics

9
推荐指数
1
解决办法
8948
查看次数

计算四边形的顶点法线

让我们说我有以下数组:

float QuadVertices[4 * 2];
float QuadNormals[4 * 2];
Run Code Online (Sandbox Code Playgroud)

我用这种方式填写:

//Fill vertices for a 2d quad
Renderer->FillVertices(QuadVertices,GL_QUADS,x,y,width,height);
Run Code Online (Sandbox Code Playgroud)

现在在这一点上一切都很好我可以渲染四边形,纹理,拉伸它和所有这些.

但现在我想计算四边形的法线:

for (int i = 0; i < 8;i++)
{
    QuadNormals[i] = ??
}
Run Code Online (Sandbox Code Playgroud)

但我无法弄清楚我应该如何计算一个简单的2d顶点数组的法线,该数组包含GL_QUADS的4vertices或GL_TRIANGLES的4vertices ....

opengl graphics normals

3
推荐指数
1
解决办法
7071
查看次数

缩小到兴趣点

我有以下变量:

  • 兴趣点,即焦点所在位置的像素位置(x,y).
  • 屏幕宽度,高度是窗口的尺寸.
  • 缩放级别,用于设置摄像机的缩放级别.

这是我到目前为止的代码.

void Zoom(int pointOfInterestX,int pointOfInterstY,int screenWidth,
   int screenHeight,int zoomLevel)
{   
glScalef(1,1,1);
glTranslatef( (pointOfInterestX/2) - (screenWidth/2), (pointOfInterestY/2) - (screenHeight/2),0);

glScalef(zoomLevel,zoomLevel,1);
}
Run Code Online (Sandbox Code Playgroud)

我想放大/缩小,但保持在屏幕中间的兴趣点.但到目前为止,我的所有尝试都失败了.

opengl math graphics

2
推荐指数
1
解决办法
665
查看次数

行,列,深度值的多维数组索引?

我有一些值是多维数组的偏移量,看起来像这样:

static const int TILE_SIZE = 32;
int Offset2D = (y * TILE_SIZE) + (x * TILE_SIZE);
int Offset3D = (y * TILE_SIZE) + (x * TILE_SIZE) + (z * TILE_SIZE);
Run Code Online (Sandbox Code Playgroud)

现在我想要做的是将偏移量转换为x,y,z对,如下所示:

void ConvertBack(int offset,int size,int& x,int& y,int& z)
{
    //What's wrong with this code ?
    x = offset / size;
    y = offset % size;
    z = ??; //How to get Z?
}
Run Code Online (Sandbox Code Playgroud)

要么

//Get back offsets from any dimension ?

void ConvertBackComplex(unsigned int offset,int size,int* vector,int len)
{ …
Run Code Online (Sandbox Code Playgroud)

c math

2
推荐指数
1
解决办法
3051
查看次数

使用64位应用程序的32位共享库?

我已经为我的渲染包装器创建了一个简单的linux 32位共享库(.so),但是当我发现我只能通过32位应用程序使用它们时,我已经碰壁了.............. ......

这是我的代码的样子:

RendIFace.h:

//Basic renderer interface
struct Renderer
{
    int type;
    ...other things
};
Run Code Online (Sandbox Code Playgroud)

GLRend.c:

#include "RendIFace.h"
struct Renderer* GLRendererCreate(int width,int height,int bytesPerPixel)
{
    struct Renderer* rend = (struct Renderer*)malloc(sizeof(Renderer));

    rend->type = GLR;
    ..other things

    return rend;
}
Run Code Online (Sandbox Code Playgroud)

SDLRend.c:

#include "RendIFace.h"
struct Renderer* SDLRendererCreate(int width,int height,int bytesPerPixel)
{
    struct Renderer* rend = (struct Renderer*)malloc(sizeof(Renderer));

    rend->type = SDLR;
    ..other things

    return rend;
}
Run Code Online (Sandbox Code Playgroud)

我编译为共享32位库(.so)并通过主应用程序加载它们...

但现在有一个大问题.我的库都是32位并返回32位指针,这意味着我不能通过64位应用程序使用它们而无需重建所有的库代码库(!!!).

所以我想问更有经验的人:我该如何处理这个问题?是否可以只为一个架构使用一个共享库?

c linux gcc shared-libraries

1
推荐指数
1
解决办法
8904
查看次数

为什么模运算符是必要的?

我在一个文档中读到你可以用逻辑替换mod操作,如下所示:

代替:

int Limit = Value % Range;
Run Code Online (Sandbox Code Playgroud)

你做:

int Limit = Value & (Range-1);
Run Code Online (Sandbox Code Playgroud)

但是编译器仍然生成mod指令,我的问题基本上是:如果编译器工作相同,为什么编译器不使用最有效的方法呢?

c c++ compiler-construction optimization

0
推荐指数
2
解决办法
1845
查看次数