Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Can';我似乎没有得到一个VAO来呈现。。。有人能帮我看看我做错了什么吗?_C#_Opengl_Glsl_Vertex Array Object - Fatal编程技术网

C# Can';我似乎没有得到一个VAO来呈现。。。有人能帮我看看我做错了什么吗?

C# Can';我似乎没有得到一个VAO来呈现。。。有人能帮我看看我做错了什么吗?,c#,opengl,glsl,vertex-array-object,C#,Opengl,Glsl,Vertex Array Object,关于这个问题,一件有趣的事情是,我尝试使用RenderDoc,但RenderDoc在我尝试加载我捕获的帧时崩溃了,每次尝试都会发生这种情况,所以图形调试工具在这种情况下似乎帮不了我 我使用的是C#,以及一组很好的OpenGL和GLFW绑定,称为CSGL() 这是我的渲染代码(我的游戏使用程序性纯色矩形作为图形基础,下面的类用于批处理我的所有绘制调用。) 使用系统; 使用制度; 使用System.Linq; 使用System.Runtime.InteropServices; 使用系统文本; 使用静

关于这个问题,一件有趣的事情是,我尝试使用RenderDoc,但RenderDoc在我尝试加载我捕获的帧时崩溃了,每次尝试都会发生这种情况,所以图形调试工具在这种情况下似乎帮不了我

我使用的是C#,以及一组很好的OpenGL和GLFW绑定,称为CSGL()

这是我的渲染代码(我的游戏使用程序性纯色矩形作为图形基础,下面的类用于批处理我的所有绘制调用。)

使用系统;
使用制度;
使用System.Linq;
使用System.Runtime.InteropServices;
使用系统文本;
使用静态CSGL.OpenGL;
名称空间BoxBlight
{
类渲染器
{
公共常量int MAX_矩形=500;
静态矩形[]矩形=新矩形[最大矩形];
静态int指数=0;
静态uint VAO=250;
静态uint VBO=250;
静态uint CBO=250;
静态布尔误差=假;
常量字符串vertShader=@”
#版本150
在vec3中处于_位置;
在vec4中以_颜色显示;
输出vec4颜色;
真空总管(真空){
gl_Position=vec4(在_Position.x,在_Position.y,在_Position.z,1.0);
ex_颜色=in_颜色;
}
";
常量字符串fragShader=@”
#版本150
高精度浮点;
在vec4中使用ex_颜色;
out vec4 gl_FragColor;
真空总管(真空){
gl_FragColor=ex_颜色;
}
";
静态uint着色器程序=250;
静态单位vs=0;
静态单位fs=0;
公共静态空白绘制(矩形、int-offsetX、int-offsetY)
{
矩形r2=新矩形(矩形);
r2.x+=抵销x;
r2.y+=偏移量;
矩形[index++]=r2;
}
公共静态void init()
{
如果(VAO==250)
{
Glgenvertexarray(1,参考VAO);
}
如果(VBO==250)
{
glGenBuffers(1,参考VBO);
}
如果(CBO==250)
{
glGenBuffers(1,参考CBO);
}
if(shaderProg==250)
{
shaderProg=glCreateProgram();
uint vertShd=glCreateShader(GL_VERTEX_SHADER);
IntPtr str=Marshal.AllocHGlobal(vertShader.Length);
Copy(Encoding.ASCII.GetBytes(vertShader)、0、str、vertShader.Length);
int length=vertShader.length;
glShaderSource(vertShd,1,ref-str,ref-length);
glCompileShader(vertShd);
弗里赫全球元帅(str);
int isCompiled=0;
glGetShaderiv(vertShd、GL编译状态、ref已完成);
如果(isCompiled==0)
{
int loglen=0;
glGetShaderiv(垂直轴、垂直轴信息、垂直轴长度、基准轴长度);
IntPtr log=Marshal.AllocHGlobal(loglen);
glGetShaderInfoLog(vertShd、loglen、ref loglen、log);
char[]chrs=新字符[loglen];
字符串=”;
封送处理副本(日志,chrs,0,loglen);
logs.Concat(chrs.AsEnumerable());
自由全球元帅(日志);
Console.Error.WriteLine(日志);
错误=正确;
返回;
}
uint fragShd=glCreateShader(GL_FRAGMENT_SHADER);
str=Marshal.AllocHGlobal(fragShader.Length);
Copy(Encoding.ASCII.GetBytes(fragShader)、0、str、fragShader.Length);
长度=fragShader.长度;
glShaderSource(fragShd,1,ref-str,ref-length);
GLG编译主管(fragShd);
弗里赫全球元帅(str);
isCompiled=0;
glGetShaderiv(fragShd、GL编译状态、ref已完成);
如果(isCompiled==0)
{
int loglen=0;
glGetShaderiv(fragShd、GL信息日志长度、参考日志长度);
IntPtr log=Marshal.AllocHGlobal(loglen);
glGetShaderInfoLog(fragShd,loglen,ref loglen,log);
char[]chrs=新字符[loglen];
字符串=”;
封送处理副本(日志,chrs,0,loglen);
logs.Concat(chrs.AsEnumerable());
自由全球元帅(日志);
Console.Error.WriteLine(日志);
错误=正确;
返回;
}
glAttachShader(shaderProg,vertShd);
glAttachShader(shaderProg,fragShd);
glLinkProgram(shaderProg);
int isLinked=0;
glGetProgramiv(着色器程序、GL链接状态、参考已链接);
如果(IsLink==0)
{
int loglen=0;
glGetProgramiv(着色器程序、GL信息日志长度、参考日志长度);
IntPtr log=Marshal.AllocHGlobal(loglen);
glGetProgramInfoLog(shaderProg,loglen,ref loglen,log);
char[]chrs=新字符[loglen];
字符串=”;
封送处理副本(日志,chrs,0,loglen);
logs.Concat(chrs.AsEnumerable());
自由全球元帅(日志);
Console.Error.WriteLine(日志);
错误=正确;
返回;
}
vs=vertShd;
fs=fragShd;
}
}
公共静态空白刷新(int xoffset、int yoffset、矩形摄影机)
{
如果(错误)
{
指数=0;
返回;
}
双[]顶点=新双[索引*18];
double[]colrs=新的double[索引*24];
整数指数=0;
int vertex_index = glGetAttribLocation(shaderProg, "in_Position");
int color_index  = glGetAttribLocation(shaderProg, "in_Color");

glBindVertexArray(VAO);

glBindBuffer(GL_ARRAY_BUFFER, VBO);
glBufferData(GL_ARRAY_BUFFER, verts.Length * sizeof(double), data0, GL_DYNAMIC_DRAW);

glEnableVertexAttribArray(vertex_index);
glVertexAttribPointer(vertex_index, 3, GL_DOUBLE, GL_FALSE, 0, IntPtr.Zero);

glBindBuffer(GL_ARRAY_BUFFER, CBO);
glBufferData(GL_ARRAY_BUFFER, colrs.Length * sizeof(double), data1, GL_DYNAMIC_DRAW);

glEnableVertexAttribArray(color_index);
glVertexAttribPointer(color_index, 4, GL_DOUBLE, GL_FALSE, 0, IntPtr.Zero);