void initUI(GameState* gs) { msAlloc(20, &uiMat); resizeUI(gs); initRootWin(); windowProg = loadCombinedProgram("ui"); // windowDepthProg = loadCombinedProgram("uiDepth"); // uniform locations icons = loadTexArray(iconFiles); // VAO glGenVertexArrays(1, &windowVAO); glBindVertexArray(windowVAO); // // texture index // glEnableVertexAttribArray(2); // glVertexAttribIPointer(2, 1, GL_UNSIGNED_INT, sizeof(WindowVertex), (void*)offsetof(WindowVertex, texIndex)); float vertices[] = { 0.0, 0.0, 0.0, 0,0, 0.0, 1.0, 0.0, 0,1, 1.0, 0.0, 0.0, 1,0, 1.0, 1.0, 0.0, 1,1 }; glGenBuffers(1, &windowVBO); glBindBuffer(GL_ARRAY_BUFFER, windowVBO); // position glEnableVertexAttribArray(0); glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(WindowVertex), 0); // texture coords glEnableVertexAttribArray(1); glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, sizeof(WindowVertex), (void*)offsetof(WindowVertex, u)); glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); glBindBuffer(GL_ARRAY_BUFFER, 0); glBindVertexArray(0); }
void initGame(XStuff* xs, GameState* gs) { int ww, wh; glerr("left over error on game init"); gs->activeTool = 0; gs->debugMode = 0; gs->sunSpeed = 0; ww = xs->winAttr.width; wh = xs->winAttr.height; gs->screen.wh.x = (float)ww; gs->screen.wh.y = (float)wh; gs->screen.aspect = gs->screen.wh.x / gs->screen.wh.y; gs->screen.resized = 0; printf("w: %d, h: %d\n", ww, wh); glEnable(GL_DEPTH_TEST); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glClearColor(0.0f, 0.0f, 0.0f, 1.0f); initTexBuffers(gs, 0); glBindTexture(GL_TEXTURE_2D, 0); glGenFramebuffers(1, &gs->framebuffer); glBindFramebuffer(GL_FRAMEBUFFER, gs->framebuffer); glexit("fbo creation"); // The depth buffer glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, gs->diffuseTexBuffer, 0); glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT1, GL_TEXTURE_2D, gs->normalTexBuffer, 0); glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT2, GL_TEXTURE_2D, gs->selectionTexBuffer, 0); glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, gs->depthTexBuffer, 0); glexit("fb tex2d"); //glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_TEXTURE_2D, gs->depthTexBuffer, 0); GLenum DrawBuffers[] = { GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1, GL_COLOR_ATTACHMENT2 }; glDrawBuffers(3, DrawBuffers); glexit("drawbuffers"); GLenum status; status = glCheckFramebufferStatus(GL_FRAMEBUFFER); if(status != GL_FRAMEBUFFER_COMPLETE) { printf("fbo status invalid\n"); exit(1); } printf("FBO created.\n"); shadingProg = loadCombinedProgram("shading"); initFSQuad(); // check some prerequisites // GLint MaxDrawBuffers = 0; // glGetIntegerv(GL_MAX_DRAW_BUFFERS, &MaxDrawBuffers); // printf("MAX_DRAW_BUFFERS: %d\n", MaxDrawBuffers); // if(MaxDrawBuffers < 4) { // fprintf(stderr, "FATAL: GL_MAX_DRAW_BUFFERS is too low: %d. Minimum required value is 4.\n", MaxDrawBuffers); // exit(3); // }; getPrintGLEnum(GL_MAX_COLOR_ATTACHMENTS, "meh"); getPrintGLEnum(GL_MAX_DRAW_BUFFERS, "meh"); getPrintGLEnum(GL_MAX_FRAMEBUFFER_WIDTH, "meh"); getPrintGLEnum(GL_MAX_FRAMEBUFFER_HEIGHT, "meh"); getPrintGLEnum(GL_MAX_FRAMEBUFFER_LAYERS, "meh"); getPrintGLEnum(GL_MAX_FRAMEBUFFER_SAMPLES, "meh"); getPrintGLEnum(GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS, "meh"); getPrintGLEnum(GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS, "meh"); getPrintGLEnum(GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS, "meh"); getPrintGLEnum(GL_MAX_TEXTURE_IMAGE_UNITS, "meh"); getPrintGLEnum(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, "meh"); getPrintGLEnum(GL_MAX_ARRAY_TEXTURE_LAYERS, "meh"); getPrintGLEnum(GL_MAX_SAMPLES, "meh"); // set up matrix stacks MatrixStack* view, *proj; view = &gs->view; proj = &gs->proj; msAlloc(2, view); msAlloc(2, proj); msIdent(view); msIdent(proj); // perspective matrix, pretty standard // msPerspective(60, 1.0, 01000.0f, 100000.0f, proj); // msOrtho(0, 1, 0, 1, .01, 100000, proj); gs->zoom = -760.0; gs->direction = 0.0f; gs->lookCenter.x = 128; gs->lookCenter.y = 128; // initialize all those magic globals initMap(&gs->map); initUI(gs); initMarker(); // text rendering stuff arial = LoadFont("Arial", 64, NULL); glerr("clearing before text program load"); textProg = loadCombinedProgram("text"); unsigned int colors[] = { 0xFF0000FF, 2, 0x00FF00FF, 4, 0x0000FFFF, INT_MAX }; strRI = prepareText(arial, "FPS: --", -1, colors); /* OBJContents cube; loadOBJFile("assets/models/untitled.obj", 0, &cube); Mesh* cubem = OBJtoMesh(&cube); */ }