#include #include #include const GLchar *source = (const GLchar *) "#version 330 core\n" "\n" "uint dosomething(int bits) {\n" " const uint mask = 0xFFFFFFFFu >> (32 - bits);\n" " return mask;\n" "}\n" "\n" "layout(location = 0)in vec4 vert;\n" "\n" "uniform mat4 projection;\n" "uniform mat4 view;\n" "uniform mat4 model;\n" "\n" "void main() {\n" " gl_Position = projection * view * model * vert;\n" "}"; int main(int argc, char* args[]) { if (SDL_Init(SDL_INIT_VIDEO) < 0) { printf("SDL init error: %s\n", SDL_GetError()); return -1; } SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3); SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 3); SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE); SDL_Window* window = SDL_CreateWindow("Shader test", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 640, 480, SDL_WINDOW_OPENGL | SDL_WINDOW_SHOWN); if (!window) { printf("SDL window error: %s\n", SDL_GetError()); return -1; } SDL_GLContext context = SDL_GL_CreateContext(window); if (!context) { printf("SDL context error: %s\n", SDL_GetError()); return -1; } GLenum glewError = glewInit(); if (glewError != GLEW_OK) { printf("GLEW error: %s\n", glewGetErrorString(glewError)); } GLuint program = glCreateProgram(); GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER); glShaderSource(vertexShader, 1, &source, 0); glCompileShader(vertexShader); GLint success = GL_TRUE; glGetShaderiv(vertexShader, GL_COMPILE_STATUS, &success); if (success == GL_FALSE) { printf("Failed.\n"); GLint maxLength = 0; glGetShaderiv(vertexShader, GL_INFO_LOG_LENGTH, &maxLength); printf("%i\n", (int) maxLength); GLchar* errorLog = (GLchar*) malloc(sizeof(GLchar) * maxLength); glGetShaderInfoLog(vertexShader, maxLength, &maxLength, errorLog); printf("%s\n", errorLog); free(errorLog); } else { printf("All OK.\n"); } return 0; }