- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
以下代码在使用 Visual Studio 的 Windows PC 上运行良好,但在 Mac 上运行时无法为三角形提供颜色。片段着色器编译似乎没有问题,但 MacOS 编译/使用着色器的方式有些问题不起作用。
我最初是从 Xcode 开始的。在发现代码可以在 Windows PC 上运行后,我便切换到 Mac 上的 Eclipse。同样的问题。毫无疑问,我有依赖问题,但我正在努力寻找它。
使用装有 Mojave 10.14.1 的 MacBook Air。 Xcode 是 10.1(10861)。 Eclipse 是 2018-09 (4.9.0)。
GLFW 是 3.2.1 版。 GLEW 是 2.1.0。
#include <iostream>
#include <string>
// GLEW
#define GLEW_STATIC
#include <GL/glew.h>
// GLFW
#include <GLFW/glfw3.h>
const GLint WIDTH = 800, HEIGHT = 600;
// Draw primative(s)
void draw() {
GLenum mode = GL_TRIANGLES;
GLint first = 0;
GLsizei count = 6;
glDrawArrays(mode, first, count);
}
// Create and compile shaders
static GLuint CompileShader(const std::string& source, GLuint shaderType) {
// Create shader object
GLuint shaderID = glCreateShader(shaderType);
const char* src = source.c_str();
// Attach source code to shader object
glShaderSource(shaderID, 1, &src, nullptr);
// Compile shader
std::cout << "Compiling shader..." << std::endl;
glCompileShader(shaderID);
// Return ID of compiled shader
return shaderID;
}
// Create program object
static GLuint CreateShaderProgram(const std::string& vertexShader, const std::string& fragmentShader) {
// Compile vertex shader
std::cout << "***** Compiling Vertex Shader *****" << std::endl;
GLuint vertexShaderComp = CompileShader(vertexShader, GL_VERTEX_SHADER);
// Compile fragment shader
std::cout << "***** Compiling Fragment Shader *****" << std::endl;
GLuint fragmentShaderComp = CompileShader(fragmentShader, GL_FRAGMENT_SHADER);
// Create program object
std::cout << "***** Create program object *****" << std::endl;
GLuint shaderProgram = glCreateProgram();
// Attach vertex and fragment shaders to program object
glAttachShader(shaderProgram, vertexShaderComp);
glAttachShader(shaderProgram, fragmentShaderComp);
std::cout << "***** Attached both Shaders *****" << std::endl;
// Link shaders to create executable
glLinkProgram(shaderProgram);
// Delete compiled shaders
glDeleteShader(vertexShaderComp);
glDeleteShader(fragmentShaderComp);
// Return shaderProgram
return shaderProgram;
}
int main() {
glfwInit(); // Initialize the glfw library
// Setup properties for the window
// THESE OPTIONS CAUSED THE TRIANGLE TO FAIL RENDERING; NOT SURE WHY
/*glfwWindowHint( GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint( GLFW_CONTEXT_VERSION_MINOR, 2);
glfwWindowHint( GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
glfwWindowHint( GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
glfwWindowHint( GLFW_RESIZABLE, GL_FALSE);*/
// Create instance of the window
GLFWwindow *window = glfwCreateWindow(WIDTH, HEIGHT, "Kevin Tooley", nullptr, nullptr);
int screenWidth, screenHeight;
glfwGetFramebufferSize(window, &screenWidth, &screenHeight);
// Handle the case that the window was not initialized
if ( nullptr == window ) {
std::cout << "Failed to create OpenGL Window" << std::endl;
glfwTerminate();
return -1;
}
glfwMakeContextCurrent( window ); // Make the window active
glewExperimental = GL_TRUE;
// Handle the case where glew failed to init
if ( GLEW_OK != glewInit() ) {
std::cout << "Failed to initialize GLEW" << std::endl;
return -1;
}
// Parameters used to display the window in relation to my screen
glViewport( 0, 0, screenWidth, screenHeight );
GLfloat vertices[] = {
// Triangle 1
0.0, 0.0, 0.0, // vert 0
1.0, 0.0, 0.0, // Red
-0.5, 0.0, 0.0, // vert 1
0.0, 1.0, 0.0, // Green
-0.5, 0.5, 0.0, // vert2
0.0, 0.0, 1.0, // Blue
// Triangle 2
0.0, 0.0, 0.0, // vert 0
1.0, 1.0, 0.0, // Red
0.5, 0.0, 0.0, // vert 1
0.0, 1.0, 1.0, // Green
0.5, -0.5, 0.0, // vert2
1.0, 0.0, 1.0 // Blue
};
GLuint VBO;
glGenBuffers(1, &VBO); // Create VBO
glBindBuffer(GL_ARRAY_BUFFER, VBO); // Select buffer ( VBO )
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); // Load vertex attributes
// Specify location and layout to GPU
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(GLfloat), (GLvoid*)0);
glEnableVertexAttribArray(0);
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(GLfloat), (GLvoid*)(3 * sizeof(GLfloat)));
glEnableVertexAttribArray(1);
// Vertex Shader source code
std::string vertexShaderSource =
"#version 330 core\n"
"layout(location = 0) in vec4 aPosition;\n"
"layout(location = 1) in vec4 aColor;\n"
"out vec4 oColor;\n"
"void main()\n"
"{\n"
"gl_Position = aPosition;\n"
"oColor = aColor;\n"
"}\n";
// Fragment shader source code
std::string fragmentShaderSource =
"#version 330 core\n"
"in vec4 oColor;\n"
"out vec4 fragColor;\n"
"void main()\n"
"{\n"
"fragColor = oColor;\n"
"}\n";
// Create shader program
GLuint shaderProgram = CreateShaderProgram(vertexShaderSource, fragmentShaderSource);
// Use shader program
glUseProgram(shaderProgram);
// Loop to process while window is open
while ( !glfwWindowShouldClose( window ) ) {
glfwPollEvents();
// Resize window and drawing simultaneously
//glfwGetFramebufferSize(window, &screenWidth, &screenHeight);
//glViewport( 0, 0, screenWidth, screenHeight );
//glClearColor( 0.2f, 0.3f, 0.3f, 1.0f );
//glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
glClear( GL_COLOR_BUFFER_BIT );
// Draw primative
draw();
//glEnable(GL_DEPTH_TEST);
glfwSwapBuffers( window );
//glfwPollEvents();
}
// The window has been closed, so terminate glfw
glfwTerminate();
return 0;
}
控制台输出如下。注意开头的错误。根据这一点它是已知的错误? GLFW first responder error
2018-11-19 22:04:14.669523-0500 GLFW OpenGL[30749:3605032] [General] ERROR: Setting <GLFWContentView: 0x1005d0e60> as the first responder for window <GLFWWindow: 0x1005aa770>, but it is in a different window ((null))! This would eventually crash when the view is freed. The first responder will be set to nil.
(
0 AppKit 0x00007fff48427a8b -[NSWindow _validateFirstResponder:] + 530
1 AppKit 0x00007fff48427835 -[NSWindow _setFirstResponder:] + 31
2 AppKit 0x00007fff484fa114 -[NSWindow _realMakeFirstResponder:] + 448
3 libglfw.3.dylib 0x00000001003619f7 _glfwPlatformCreateWindow + 644
4 libglfw.3.dylib 0x000000010035d71e glfwCreateWindow + 443
5 GLFW OpenGL 0x00000001000015bd main + 77
6 libdyld.dylib 0x00007fff7803508d start + 1
)
***** Compiling Vertex Shader *****
Compiling shader...
***** Compiling Fragment Shader *****
Compiling shader...
***** Create program object *****
***** Attached both Shaders *****
Program ended with exit code: 0
最后,这是 Mac 上输出的屏幕截图:
我没有 PC 的屏幕截图,但它可以正常工作。
最佳答案
您的着色器设置为使用 OpenGL 3.3 核心配置文件,但您未在 GLFW 初始化中指定版本。这可能导致着色器与正在初始化的 OpenGL 版本不匹配。 Check out this link并为主要版本和次要版本指定 3。
另外,您可能想检查您的着色器程序编译时是否有错误。 Here is an example from the OpenGL wiki关于如何做到这一点。
如果您仍有问题,请添加 glGetError()在每次 OpenGL 调用之后确定错误发生的位置。
关于c++ - 使用 Xcode 和 Eclipse 在 Mac Mojave 上编译着色器问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53385743/
我必须在文本区域上绘制哪些选项? 我认识一些所见即所得的编辑器。我不确定他们使用的方法是什么,并且会看看他们以了解,但我知道像 tinymce 这样的事情已经存在了一段时间,所以我猜现在可能有更现代的
我在我的 woo commerce 商店页面中创建了一个子类别排序菜单。我想将链接到我现在所在页面的链接设置为红色。我对 css 没有问题,只是用 js 脚本。我怎样才能让它突出当前?这是我创建的排序
所以我使用 TextWrangler4.5.3 并主要使用 Python 编写脚本。当我编写 Python 时,我经常喜欢发表类似这样的评论:# BEGINS foo 然后是 # ENDS foo 我
我需要你的帮助! 我有一个表格,里面有行(姓名等)现在,当位于该行上的对象具有特定值时,我想为特定的 tableCells 背景着色。但我只得到它来读取这个单元格的值。但我需要阅读对象(在我的代码中称
有人知道在 uikit 中给 uiactionsheet 着色吗? 最佳答案 是的,因为它是一个 UIView(如 kmit 所述),您可以使用以下命令:addSubview,因此您可以添加自己的背景
在 vba 中,我想从工作表中的单元格中读取颜色来为条形图中的特定条形着色。我的问题是我的颜色格式为 4F9F92,但要在 makro 中读取它,我需要使用单元格中的 excel 颜色代码 40762
我正在尝试绘制一个 geom_histogram,其中条形图由渐变着色。 这就是我想要做的: library(ggplot2) set.seed(1) df <- data.frame(id=past
我正在构建一个带有 shiny 的应用程序,并使用与 Shiny gallery ( http://shiny.rstudio.com/gallery/slider-bar-and-slider-ra
在 iOS 6 和 xcode 4 中,我有这个: https://dl.dropboxusercontent.com/u/60718318/photo.PNG使用代码可以轻松创建 [editButt
我正在向我的 iPhone UI 添加自定义按钮,并希望使它们具有 Apple 应用程序中的玻璃外观。我有一个很好的默认玻璃图像,但我不想为我想要的每种色调(红色、绿色、蓝色等)都有一个单独的图像。
我到处寻找但没有找到解决方案。我有图像 1。如何以编程方式使用渐变对它们进行着色以获得图像 2 和 3?以下是这些图像: 我通过 Photoshop 应用到它们的色调是简单的 2 色线性渐变。 我的问
有没有办法告诉 OS X 自动设置 NSToolbarItem 的样式/色调? 我通过 IB/Xcode 添加了一个“图像工具栏项”,并将图标设置为黑色 PDF as described in the
我试图区分列范围图表上的多种类型的数据。问题是我希望能够按多个标准对它们进行分组。 我可以轻松地为不同的列着色,从而解决一个问题,但我希望能够根据我传递到图表的数据,为 xAxis 上的类别(图表是倒
有人在编译模式 Emacs 中添加了对 ansi-color 的支持吗?如果是这样,颜色写入程序必须检查什么属性/属性才能确保其事件终端支持 ANSI 转义着色。 最佳答案 已经有一个函数可以将颜色应
我正在尝试实现 Phong 着色模型,但我不确定如何选择光源。更具体地说,我不明白光源应该是什么样子。它应该是vec3吗?或者也许是我在 Java 代码中定义的矩阵?另外,如果我们假设我希望相机作为光
我有 2 个 dhtmlxSidebars,就像示例中一样 here如何为嵌套背景设置不同的背景颜色?如果我添加CSS .dhxsidebar_side { background-color:
我有一个 JTable,每行都根据最后一列中的值着色。 但是,当我单击标题对行进行排序时,颜色不会跟随行。 我尝试在 JTable 鼠标退出事件上调用我的“colourTable”方法(我知道 Hac
geom_hline 似乎忽略了美观,我错过了什么还是这是一个错误? df session 信息: R version 3.4.4 (2018-03-15) Platform: x86_64-pc-
这个问题已经有答案了: How to draw a BufferedImage with a color tint (1 个回答) 已关闭 8 年前。 如何将通过此处的图标着色为不同的颜色?假设我想拍
我想为除我点击的那个之外的所有 div 着色。在我的代码中它有效,但只有一次。如果我点击另一个 div,它不起作用。 http://jsfiddle.net/6VhK8/353/ id="1
我是一名优秀的程序员,十分优秀!