Ejemplo n.º 1
0
/* 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;
}
Ejemplo n.º 2
0
void Curvature::init()
{
	loadProgram();
	loadVA();
	loadBuffers();
	loadTransformFeedbacks();
	
	glGenQueries (1, &Parameters::getInstance()->g_query[QUERY_TRIANGLES]);
}
Ejemplo n.º 3
0
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);
}
Ejemplo n.º 4
0
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;
}
Ejemplo n.º 5
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();
}
Ejemplo n.º 6
0
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;
}
Ejemplo n.º 8
0
void TransitionTriangulation::init()
{
	loadTables();
	loadBuffers();
	loadPrograms();
}