为什么以下代码打印出来"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++中为堆栈分配一个变长数组(例如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) 我正在尝试将一些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的维基:顶点规格指出:
注:该
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)