/* Initializes graphics subsystem */ int gInit(GContext *context) { glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); //glEnable(GL_TEXTURE_2D); glPixelStorei(GL_UNPACK_ALIGNMENT, 1); glClearColor(0,0,0,0); glClear(GL_COLOR_BUFFER_BIT); loadShaders(&(context->shaders)); loadPrograms(&(context->programs),&(context->shaders)); loadBuffers(&(context->buffers)); setModelview(context,1,0,0,1); setTranslation(context,0,0); //printInfo("initGraphics()\n"); #ifdef DEBUG checkError(); #endif if(context->callback != NULL) context->callback(context->callback_data); return 0; }
void Curvature::init() { loadProgram(); loadVA(); loadBuffers(); loadTransformFeedbacks(); glGenQueries (1, &Parameters::getInstance()->g_query[QUERY_TRIANGLES]); }
void BufferManager::initialize(const char* file) { std::string controlFileName = std::string(file) + ".trc"; char* fullcontrolFileName = combinePath(_dataDir.c_str(), controlFileName.c_str()); std::string fileName = std::string(file); char* fullLogFileName = combinePath(_dataDir.c_str(), fileName.c_str()); _logFileName = strcpy(const_cast<char*>(fileName.c_str()), fileName.length()); bool existControl = existFile(fullcontrolFileName); char* flags; if (existControl) { flags = "rb+"; } else { flags = "wb+"; } _controlFile = (InputOutputStream*)new FileInputOutputStream(fullcontrolFileName, flags); if (_log->isDebug()) _log->debug(3, "_controlFile->acquireLock();"); _controlFile->acquireLock(); _controlFile->seek(0); bool existLogFile = existFile(fullLogFileName); if (existLogFile) { flags = "rb+"; } else { flags = "wb+"; } if (existControl) { _buffersSize = _controlFile->readLong(); loadBuffers(); } else { _controlFile->writeLong(_buffersSize); __int64 pos = _controlFile->currentPos(); _controlFile->writeInt(0); _controlFile->seek(pos); loadBuffers(); } if (_log->isDebug()) _log->debug(3, "_controlFile->releaseLock();"); _controlFile->releaseLock(); free(fullcontrolFileName); free(fullLogFileName); }
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow){ sf::SoundBuffer soundBuffers[NUM_COL][MAX_PER_COL]; sf::Sound sounds[NUM_COL][MAX_PER_COL]; sf::Image buttons[NUM_COL][MAX_PER_COL]; sf::Sprite btns[NUM_COL][MAX_PER_COL]; sf::RenderWindow mainWin(sf::VideoMode(W_WIDTH, W_HEIGHT, 32), "Soundboard - by eyeosk", sf::Style::Close); sf::Image background; sf::Image header; sf::Sprite bg; sf::Sprite hd; hd.SetY(0); hd.SetX(W_WIDTH/4); bg.SetX(0); bg.SetY(0); background.LoadFromFile("background.png"); header.LoadFromFile("header.png"); bg.SetImage(background); hd.SetImage(header); int numInCol[NUM_COL]; for(int i = 0; i < NUM_COL; i++){ loadBuffers(soundBuffers[i], i); numInCol[i] = loadImages(buttons[i], i); setSprites(buttons[i], btns[i], numInCol[i]); setBuffers(soundBuffers[i], sounds[i], numInCol[i]); setSpritesPos(btns[i], i, numInCol[i]); } mainWin.SetFramerateLimit(360); while(mainWin.IsOpened()){ sf::Event mainEvent; while(mainWin.GetEvent(mainEvent)){ if(mainEvent.Type == sf::Event::Closed || (mainEvent.Type == sf::Event::KeyPressed && mainEvent.Key.Code == sf::Key::Escape)){ mainWin.Close(); } if(mainEvent.Type == sf::Event::MouseButtonPressed){ for(int i = 0; i < NUM_COL; i++){ for(int j = 0; j < numInCol[i]; j++){ if(checktangle(i, j, mainEvent.MouseButton.X, mainEvent.MouseButton.Y)){ sounds[i][j].Play(); } } } } } mainWin.Clear(); mainWin.Draw(bg); mainWin.Draw(hd); for(int i =0; i < NUM_COL; i++){ for(int j = 0; j < numInCol[i]; j++){ mainWin.Draw(btns[i][j]); } } mainWin.Display(); } return 0; }
DB::DB(const std::string & filename) { int res; SQLOK(open(filename.c_str(), &dbh), "opening database"); SQLOK(exec(dbh, "PRAGMA synchronous=0;\n" "BEGIN;\n" "CREATE TABLE IF NOT EXISTS \"sender\" (\n" " \"id\" INTEGER NOT NULL,\n" " \"nick\" VARCHAR,\n" " \"user\" VARCHAR,\n" " \"host\" VARCHAR,\n" " PRIMARY KEY (\"id\")\n" ");\n" "CREATE TABLE IF NOT EXISTS \"network\" (\n" " \"id\" INTEGER NOT NULL,\n" " \"name\" VARCHAR,\n" " PRIMARY KEY (\"id\")\n" ");\n" "CREATE TABLE IF NOT EXISTS \"buffer\" (\n" " \"id\" INTEGER NOT NULL,\n" " \"networkid\" INTEGER NOT NULL,\n" " \"name\" VARCHAR,\n" " PRIMARY KEY (\"id\"),\n" " FOREIGN KEY (\"networkid\") REFERENCES \"network\" (\"id\")\n" ");\n" "CREATE TABLE IF NOT EXISTS \"log\" (\n" " \"id\" INTEGER NOT NULL,\n" " \"type\" INTEGER NOT NULL,\n" " \"timestamp\" INTEGER NOT NULL,\n" " \"bufferid\" INTEGER NOT NULL,\n" " \"senderid\" INTEGER NOT NULL,\n" " \"message\" VARCHAR,\n" " PRIMARY KEY (\"id\"),\n" " FOREIGN KEY (\"bufferid\") REFERENCES \"buffer\" (\"id\"),\n" " FOREIGN KEY (\"senderid\") REFERENCES \"sender\" (\"id\")\n" ");\n" "CREATE INDEX IF NOT EXISTS \"logBufferTimestamp\" ON \"log\" (\"bufferid\", \"timestamp\");\n" "CREATE INDEX IF NOT EXISTS \"logTimestamp\" ON \"log\" (\"timestamp\");\n" "COMMIT;\n", NULL, NULL, NULL), "initializing database"); PREPARE_STMT(stmt_add_message, "message insertion", "INSERT INTO \"log\"" " (\"timestamp\", \"type\", \"bufferid\", \"senderid\", \"message\")" " VALUES (?, ?, ?, ?, ?)"); PREPARE_STMT(stmt_add_buffer, "buffer insertion", "INSERT INTO \"buffer\" (\"networkid\", \"name\") " "VALUES (?, ?)"); PREPARE_STMT(stmt_add_network, "network insertion", "INSERT INTO \"network\" (\"name\") " "VALUES (?)"); PREPARE_STMT(stmt_add_sender, "sender insertion", "INSERT INTO \"sender\" (\"nick\", \"user\", \"host\") " "VALUES (?, ?, ?)"); PREPARE_STMT(stmt_begin, "begin", "BEGIN"); PREPARE_STMT(stmt_commit, "commit", "COMMIT"); loadNetworks(); loadBuffers(); loadSenders(); }
void QuadSurfaces::update() { clock_t t1,t2,tt; t1 = tt = clock(); // Update and depth sort surfaces.. //Calculate distances from view plane float maxdist, mindist; view->getMinMaxDistance(&mindist, &maxdist); Geometry::update(); tt=clock(); if (geom.size() == 0) return; //Get element/quad count debug_print("Reloading and sorting %d quad surfaces...\n", geom.size()); total = 0; hiddencache.resize(geom.size()); surf_sort.clear(); int quadverts = 0; for (unsigned int i=0; i<geom.size(); i++) { int quads = (geom[i]->width-1) * (geom[i]->height-1); quadverts += quads * 4; total += geom[i]->count; //Actual vertices hiddencache[i] = !drawable(i); //Save flags debug_print("Surface %d, quads %d hidden? %s\n", i, quadverts/4, (hiddencache[i] ? "yes" : "no")); //Get corners of strip float* posmin = geom[i]->vertices[0]; float* posmax = geom[i]->vertices[geom[i]->count - 1]; float pos[3] = {posmin[0] + (posmax[0] - posmin[0]) * 0.5f, posmin[1] + (posmax[1] - posmin[1]) * 0.5f, posmin[2] + (posmax[2] - posmin[2]) * 0.5f }; //Calculate distance from viewing plane geom[i]->distance = eyeDistance(view->modelView, pos); if (geom[i]->distance < mindist) mindist = geom[i]->distance; if (geom[i]->distance > maxdist) maxdist = geom[i]->distance; //printf("%d) %f %f %f distance = %f\n", i, pos[0], pos[1], pos[2], geom[i]->distance); surf_sort.push_back(Distance(i, geom[i]->distance)); //Disable triangle sorting for these surfaces geom[i]->opaque = true; } if (total == 0) return; t2 = clock(); debug_print(" %.4lf seconds to calculate distances\n", (t2-t1)/(double)CLOCKS_PER_SEC); t1 = clock(); //Sort std::sort(surf_sort.begin(), surf_sort.end()); t2 = clock(); debug_print(" %.4lf seconds to sort\n", (t2-t1)/(double)CLOCKS_PER_SEC); t1 = clock(); //Only reload the vbo data when required //Not needed when objects hidden/shown but required if colours changed //To force, use Geometry->reset() which sets elements to -1 if (elements < 0 || elements != quadverts) { //Clear buffers close(); elements = quadverts; //Load & optimise the mesh data render(); //Send the data to the GPU via VBO loadBuffers(); } }
int GraphicsSubsystem::initGraphicsSubsystem() { char *myargv[1]; int myargc = 1; myargv[0] = _strdup(COPYRIGHT); glutInit(&myargc, myargv); glutInitWindowPosition(WIN_POS_X, WIN_POS_Y); glutInitWindowSize(windowSize.x, windowSize.y); glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH | GLUT_RGBA | GLUT_MULTISAMPLE); glutCreateWindow("Practical Work"); glewExperimental = GL_TRUE; GLenum err = glewInit(); if (GLEW_OK != err) { printf("Errors occurred during glew init\n"); return GSS_ERROR; } else if (!GLEW_VERSION_3_3) { GLint major = 0, minor = 0; glGetIntegerv(GL_MAJOR_VERSION, &major); glGetIntegerv(GL_MINOR_VERSION, &minor); printf("Application requires OpenGL 3.3; current version is %i.%i\n", major, minor); return GSS_ERROR; } bindingIndexes["matrices"] = 0; bindingIndexes["light"] = 1; bindingIndexes["material"] = 2; const char *textureUnits[] = { "ball", "cloth", "wood", "room", "roomBall" }; loadTextureUnits(textureUnits, sizeof(textureUnits) / sizeof(char*)); loadShaders(); loadUniforms(); loadBuffers(); printf("Loading textures...\n"); loadTexture(TEXTURE_PATH "ball_albedo.png", textures["ball"]); loadTexture(TEXTURE_PATH "cloth.png", textures["cloth"]); loadTexture(TEXTURE_PATH "wood.png", textures["wood"]); #if loadSky == 1 const char *skybox[] = { TEXTURE_PATH "skybox/negx.jpg", TEXTURE_PATH "skybox/posx.jpg", TEXTURE_PATH "skybox/negy.jpg", TEXTURE_PATH "skybox/posy.jpg", TEXTURE_PATH "skybox/negz.jpg", TEXTURE_PATH "skybox/posz.jpg" }; const char *skyboxBall[] = { TEXTURE_PATH "skyboxBall/negx.jpg", TEXTURE_PATH "skyboxBall/posx.jpg", TEXTURE_PATH "skyboxBall/negy.jpg", TEXTURE_PATH "skyboxBall/posy.jpg", TEXTURE_PATH "skyboxBall/negz.jpg", TEXTURE_PATH "skyboxBall/posz.jpg" }; loadCubemap(skybox, sizeof(skybox) / sizeof(char*), textures["room"]); loadCubemap(skyboxBall, sizeof(skyboxBall) / sizeof(char*), textures["roomBall"]); #endif createDepthBuffer(); createSampler(); glEnable(GL_CULL_FACE); glCullFace(GL_BACK); glEnable(GL_MULTISAMPLE); glHint(GL_MULTISAMPLE_FILTER_HINT_NV, GL_NICEST); glEnable(GL_DEPTH_TEST); glDepthMask(GL_TRUE); glDepthFunc(GL_LEQUAL); glDepthRange(0.0f, 1.0f); glEnable(GL_DEPTH_CLAMP); return 0; }
void TransitionTriangulation::init() { loadTables(); loadBuffers(); loadPrograms(); }