小编Mor*_*bel的帖子

数组/指针混淆

为什么以下代码打印出来"0 0 0 0 0 0 0 "?我在期待"1 3 6 10 15 21 28 ".

#include <iostream>

using namespace std;

void PrefixSum(float * input, float * output, int n){
    float sum = 0;
    for (int i=0;i<n;i++){
        float value = input[i];
        sum += value;
        output[n] = sum;
    }    
}


int main(int argc, const char * argv[])
{
    float input[] = {1,2,3,4,5,6,7};
    float output[] = {0,0,0,0,0,0,0};
    PrefixSum(input, output, 7);
    for (int i=0;i<7;i++){
        cout << output[i] << " "; …
Run Code Online (Sandbox Code Playgroud)

c++

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

C++中的数组在具有不同长度的堆栈上进行分配

我很惊讶地发现可以在C++中为堆栈分配一个变长数组(例如int array[i];).它似乎在clang和gcc(在OS/X上)都能正常工作,但是MSVC 2012不允许它.

这个语言功能叫什么?它是官方的C++语言功能吗?如果是,那么哪个版本的C++?

完整示例:

#include <iostream>

using namespace std;

int sum(int *array, int length){
    int s = 0;
    for (int i=0;i<length;i++){
        s+= array[i];
    }
    return s;
}

int func(int i){
    int array[i]; // <-- This is the feature that I'm talking about
    for (int j=0;j<i;j++){
        array[j] = j;
    }

    return sum(array, i);

}

int main(int argc, const char * argv[])
{
    cout << "Func 1 "<<func(1)<<endl;
    cout << "Func 2 "<<func(2)<<endl;
    cout << "Func 3 "<<func(3)<<endl;

    return …
Run Code Online (Sandbox Code Playgroud)

c++ g++ clang visual-c++

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

在OS/X上使用glDrawElements(OpenGL 3.2核心配置文件)

我正在尝试将一些OpenGL 3.2代码从Windows移植到OS/X 10.8(使用GLFW核心配置文件),但在调用glDrawElements时获取INVALID_OPERATION(glError()).glDrawArrays函数工作正常,因此我的着色器初始化正常.

以下片段很好地解释了我在做什么.我知道自己做错了什么?

struct Vertex {
 vec2 position;
 vec3 color;
};

void display() {
    glClearColor(0.0, 0.0, 0.0, 1.0);
    glClear(GL_COLOR_BUFFER_BIT);

    glUseProgram(shaderProgram);

    mat4 projection = Ortho2D(-15.0f, 15.0f, -15.0f, 15.0f);
    glUniformMatrix4fv(projectionUniform, 1, GL_TRUE, projection);

    glBindVertexArray(shapeVertexArrayBuffer);

    mat4 modelView;

    // upper left
    modelView = Translate(-7,+7,0);
    glUniformMatrix4fv(modelViewUniform, 1, GL_TRUE, modelView);
    glDrawArrays(GL_TRIANGLE_FAN, 0, rectangleSize); // renders correctly

    // upper right
    modelView = Translate(+7,+7,0);
    glUniformMatrix4fv(modelViewUniform, 1, GL_TRUE, modelView);
    GLuint indices[6] = {0,1,2,3,4,0};
    glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, indices); //INVALID_OPERATION

    glfwSwapBuffers();
}

void loadGeometry() {
    vec3 color(1.0f, 1.0f, 0.0f);
    Vertex …
Run Code Online (Sandbox Code Playgroud)

opengl macos glfw

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

OpenGL:VAO/VBO混乱

OpenGL的维基:顶点规格指出:

注:GL_ARRAY_BUFFER绑定是不是该VAO的国家的一部分!我知道这很令人困惑,但事实就是如此.

下面是我如何使用VAO,它似乎按预期工作.这有什么不对?我对OpenGL(或OpenGL Wiki),OpenGL驱动程序(OSX 10.9)或OpenGL Wiki的理解?

// ------ Pseudo-code ------ 
// setup
[...]
glBindVertexArray(vertexArrayObjectIdx1);
glBindBuffer(GL_ARRAY_BUFFER, vertexBufferId1);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, elementBufferId1);
for each vertex attribute
    glEnableVertexAttribArray(...);
    glVertexAttribPointer(...);

glBindVertexArray(vertexArrayObjectIdx2);
glBindBuffer(GL_ARRAY_BUFFER, vertexBufferId2);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, elementBufferId2);
for each vertex attribute
    glEnableVertexAttribArray(...);
    glVertexAttribPointer(...);

// rendering
[...]
glBindVertexArray(vertexArrayObjectIdx1);
glDrawElements(...);
glBindVertexArray(vertexArrayObjectIdx2);
glDrawElements(...);
Run Code Online (Sandbox Code Playgroud)

c++ opengl vbo vao

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

标签 统计

c++ ×3

opengl ×2

clang ×1

g++ ×1

glfw ×1

macos ×1

vao ×1

vbo ×1

visual-c++ ×1