コード例 #1
0
		void OnBeforeRender()
		{
			glUseProgram(program_handle);
			glUniform1ui(uniform_window_width,(GLuint)Window::width);
			glUniform1ui(uniform_window_height,(GLuint)Window::height);
			glUseProgram(0);
		}
コード例 #2
0
ファイル: main.cpp プロジェクト: DomNomNom/atomos_gpu
// sets uniforms that are used in both shader_tick and shader_display
void setSharedShaderUniforms(Shader &s) {
    glActiveTexture(GL_TEXTURE2);  glBindTexture(GL_TEXTURE_2D, connectionMapTexture);
    glUniform1i( glGetUniformLocation(s.id(), "connectionMap"), 2);

    glUniform1f( glGetUniformLocation(s.id(), "time"), time_sinceInit());
    glUniform1i( glGetUniformLocation(s.id(), "lastTick"), 0);
    glUniform1ui(glGetUniformLocation(s.id(), "maxVolumes"),  maxVolumes);
    glUniform1ui(glGetUniformLocation(s.id(), "maxCapacity"), maxCapacity);
}
コード例 #3
0
ファイル: game.c プロジェクト: jsutlovic/YALS2
static inline void _render_world(game *g) {
    glClear(GL_COLOR_BUFFER_BIT);

    glUseProgram(g->world_shader);

    glUniformMatrix4fv(g->d.matrix_id, 1, GL_FALSE, &g->d.mvp[0][0]);
    glUniform4fv(g->d.colors_id, 5, GET_COL(COLORS_OFFSET));
    glUniform1ui(g->d.inv_state_id, !g->w->state);

    glBindBuffer(GL_ARRAY_BUFFER, g->d.vert_buffer);
    glEnableVertexAttribArray(0);
    glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, 0);

    glBindTexture(GL_TEXTURE_BUFFER, g->d.data_tex);
    glActiveTexture(GL_TEXTURE0 + g->d.tex_id);
    glTexBuffer(GL_TEXTURE_BUFFER, GL_R32UI, g->d.data_buffer);
    glUniform1i(g->d.tex_buff_id, g->d.tex_id);

    glDrawArrays(GL_TRIANGLES, 0, g->d.vcount / 2);

    glDisableVertexAttribArray(0);
    glBindTexture(GL_TEXTURE_BUFFER, 0);
    glBindBuffer(GL_ARRAY_BUFFER, 0);

    glUseProgram(0);
}
コード例 #4
0
ファイル: u.cpp プロジェクト: soulik/luagl
	int gl_Uniformui(State& state){
		int argc = state.stack->getTop();
		switch (argc){
		case 5:
			glUniform4ui((GLint)state.stack->to<int>(1), (GLuint)state.stack->to<int>(2), (GLuint)state.stack->to<int>(3), (GLuint)state.stack->to<int>(4), (GLuint)state.stack->to<int>(5));
			break;
		case 4:
			glUniform3ui((GLint)state.stack->to<int>(1), (GLuint)state.stack->to<int>(2), (GLuint)state.stack->to<int>(3), (GLuint)state.stack->to<int>(4));
			break;
		case 3:
			glUniform2ui((GLint)state.stack->to<int>(1), (GLuint)state.stack->to<int>(2), (GLuint)state.stack->to<int>(3));
			break;
		case 2:
			if (state.stack->is<LUA_TTABLE>(2)){
				size_t size = 0;
				GLuint * data;
				vector<unsigned int> _data;

				size = getArray<unsigned int>(state, 2, _data);
				data = _data.data();
				glUniform1uiv((GLint)state.stack->to<int>(1), (GLsizei)size, (GLuint *)data);
			}
			else if (state.stack->is<LUA_TNUMBER>(2)){
				glUniform1ui((GLint)state.stack->to<int>(1), (GLuint)state.stack->to<int>(2));
			}
			break;
		default:
			break;
		}
		return 0;
	}
コード例 #5
0
void Program::uniform1ui(const char* name, GLuint i)
{
    this->bind();

    GLint u = this->uniform(name);
    glUniform1ui(u, i);
}
コード例 #6
0
	void ShaderProgram::setUniform(const GLchar *name, unsigned int x)
	{
		if (!isInUse())
			use();

		glUniform1ui(getUniformLocation(name), x);
	}
コード例 #7
0
ファイル: ObjectRenderer.cpp プロジェクト: OpenGP/htrack
void ObjectRenderer::set_uniform_uint(const char* name, unsigned int value)
{
    assert(program.isLinked());
    program.bind();
	GLuint id = glGetUniformLocation(program.programId(), name);
        glUniform1ui(id, value);
    program.release();
}
コード例 #8
0
ファイル: ShaderProgram.cpp プロジェクト: Kitsune001/Dunjun
void ShaderProgram::setUniform(const std::string& name, u32 x) const
{
	checkInUse();
	s32 loc{getUniformLocation(name)};
	if (loc == -1)
		return;
	glUniform1ui(loc, x);
}
コード例 #9
0
ファイル: ShaderUniform.cpp プロジェクト: SDraw/run-on-coal
void ROC::ShaderUniform::Update()
{
    if(!m_updated)
    {
        switch(m_type)
        {
            case SUT_Float:
                glUniform1f(m_uniform, m_float[0]);
                break;
            case SUT_Float2:
                glUniform2f(m_uniform, m_float[0], m_float[1]);
                break;
            case SUT_Float3:
                glUniform3f(m_uniform, m_float[0], m_float[1], m_float[2]);
                break;
            case SUT_Float4:
                glUniform4f(m_uniform, m_float[0], m_float[1], m_float[2], m_float[3]);
                break;

            case SUT_Int: case SUT_Sampler: case SUT_ShadowSampler: case SUT_CubeSampler:
                glUniform1i(m_uniform, m_int[0]);
                break;
            case SUT_Int2:
                glUniform2i(m_uniform, m_int[0], m_int[1]);
                break;
            case SUT_Int3:
                glUniform3i(m_uniform, m_int[0], m_int[1], m_int[2]);
                break;
            case SUT_Int4:
                glUniform4i(m_uniform, m_int[0], m_int[1], m_int[2], m_int[3]);
                break;

            case SUT_Bool:
                glUniform1ui(m_uniform, m_bool[0]);
                break;
            case SUT_Bool2:
                glUniform2ui(m_uniform, m_bool[0], m_bool[1]);
                break;
            case SUT_Bool3:
                glUniform3ui(m_uniform, m_bool[0], m_bool[1], m_bool[2]);
                break;
            case SUT_Bool4:
                glUniform4ui(m_uniform, m_bool[0], m_bool[1], m_bool[2], m_bool[3]);
                break;

            case SUT_Mat2:
                glUniformMatrix2fv(m_uniform, 1, GL_FALSE, m_float);
                break;
            case SUT_Mat3:
                glUniformMatrix3fv(m_uniform, 1, GL_FALSE, m_float);
                break;
            case SUT_Mat4:
                glUniformMatrix4fv(m_uniform, 1, GL_FALSE, m_float);
                break;
        }
        m_updated = true;
    }
}
コード例 #10
0
ファイル: GLFuncs.cpp プロジェクト: AugustoRuiz/UWOL
void GLFuncs::SetUniform(GLuint programId, const string &name, GLuint val) {
	if (programId != 0) {
		GLint location = getUniformLocation(programId, name);
		if (location != -1) {
			this->UseProgram(programId);
			glUniform1ui(location, val);
		}
	}
}
コード例 #11
0
void ShaderProgram::SetUniform(const std::string name, const bool b)
{
    GLint location = glGetUniformLocation( handle_, name.c_str() );
    if(location != -1){
        glUniform1ui(location, b);
    }else{
        DEBUG_MESSAGE("Uniform variable " << name << " not found.");
    }
}
コード例 #12
0
ファイル: dsgl.cpp プロジェクト: DenisSalem/ShitNStuff
	// Shader Program //
	void ShaderProgram::Uniformui(const char * uniformName, GLuint v0) {
		GLint loc = glGetUniformLocation(this->ID, uniformName);
		if (loc != -1) {
			glUniform1ui(loc, v0);
		}
		else {
		  throw Exception(DSGL_UNIFORM_LOCATION_DOESNT_EXISTS, DSGL_MSG_UNIFORM_LOCATION_DOESNT_EXISTS);
		}
	}
コード例 #13
0
ファイル: Program.cpp プロジェクト: citron0xa9/FluidSim
void Program::loadObjectIndex(const unsigned int index)
{
	use();
	GLint location = glGetUniformLocation(m_Id, m_UNIFORM_NAMES.objectIndex.c_str());
	if (location == -1) {
		throw std::runtime_error("Error getting uniform location for cameraPosition");
	}
	glUniform1ui(location, index+1);	//saved with 1 added to distinguish no object from object with id 0
}
コード例 #14
0
void ShaderProgram::Set(const char *name, unsigned int value)
{
	if (usedProg != 0 && usedProg != prog) {
		TODO("Fix bug!");
	}
	int uniform = getUniformLocation(name);
	if (uniform == -1) return;

	glUniform1ui(uniform, value);
}
コード例 #15
0
ファイル: Shader.cpp プロジェクト: kmclarnon/Tranquility
bool Shader::setShaderUniform(const std::string &name, GLuint v0)
{
    GLint loc;
    if(!this->getUniformLoc(name, loc))
        return false;

    glUniform1ui(loc, v0);

    return true;
}
コード例 #16
0
	void GraphicsEngine::LightCullingPass(Engine::World * world)
	{
		int workGroupsX = (SCREEN_SIZE_X + (SCREEN_SIZE_X % GRID_SIZE)) / GRID_SIZE;
		int workGroupsY = (SCREEN_SIZE_Y + (SCREEN_SIZE_Y % GRID_SIZE)) / GRID_SIZE;

		GraphicsCore::GPUAPI::UseShader(g_LightCullingProgram);

		glActiveTexture(GL_TEXTURE0);
		glBindTexture(GL_TEXTURE_2D, g_DepthPrePassFBO.texId);

		glm::mat4 projInv = glm::inverse(*(world->GetCamera()->GetPerspectiveMat()));
		glUniformMatrix4fv(glGetUniformLocation(g_LightCullingProgram, "inverseProj"), 1, GL_FALSE, glm::value_ptr(projInv));

		auto* lights = world->GetLights();
		glUniform1ui(glGetUniformLocation(g_LightCullingProgram, "numLights"), static_cast<uint32_t>(lights->size()));
	
		// DEBUGGING STUFF TO REMOVE!!!!
		for (int i = 0; i < lights->size(); i++) {
			Light& light = (*lights)[i];
			float min = 0;
			float max = 16;
			glm::vec4 pos = light.GetWorldSpacePosition();

			//int test = rand() % 3;

			light.SetWorldSpacePosition(glm::vec4(fmod((pos.x + (-4.5f * 0.01f) - min + max), max) + min, pos.y, pos.z, 1.0f));
		}
		// END OF DEBUGGING STUFF!!!

		for(uint32_t i = 0; i < world->GetLights()->size(); ++i)
		{
			(*lights)[i].UpdateViewSpaceCoord(world->GetCamera()->GetViewMatrix());
		}

		g_LightBufferSSBO.Init(world->GetLights()->size() * sizeof(Renderer::Light), GraphicsCore::BufferUsage::DynamicDraw, static_cast<void*>(world->GetLights()->data()));

		glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 0, g_LightBufferSSBO.SSBO);

		glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 1, g_FrustrumSSBO.SSBO);
		glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 2, g_OpaqueLightGridSSBO.SSBO);
		glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 3, g_TransparentLightGridSSBO.SSBO);
		glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 4, g_OpaqueLightIndexListSSBO.SSBO);
		glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 5, g_TransparentLightIndexListSSBO.SSBO);

		uint32_t opaqueLightInitValue = 0;
		g_OpaqueLightIndexCounterSSBO.Init(1 * sizeof(uint32_t), GraphicsCore::BufferUsage::DynamicCopy, &opaqueLightInitValue);
		glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 6, g_OpaqueLightIndexCounterSSBO.SSBO);

		uint32_t transparentLightInitValue = 0;
		g_TransparentLightIndexCounterSSBO.Init(1 * sizeof(uint32_t), GraphicsCore::BufferUsage::DynamicCopy, &opaqueLightInitValue);
		glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 7, g_TransparentLightIndexCounterSSBO.SSBO);

		glDispatchCompute(workGroupsX, workGroupsY, 1);
		glBindTexture(GL_TEXTURE_2D, 0);
	}
コード例 #17
0
ファイル: Planet.cpp プロジェクト: SenderOK/SolarSystem
void Planet::Draw()
{
    int texLoc = glGetUniformLocation(shaderId, "texture");
    if (texLoc>-1)
        glUniform1ui(texLoc, texId[currTexture]);

    glBindTexture(GL_TEXTURE_2D, texId[currTexture]);
    glBindVertexArray(vao);
    glDrawElements(GL_TRIANGLES, indexesCount, GL_UNSIGNED_INT, 0);
    glBindVertexArray(0);
}
コード例 #18
0
void Terrain::render(Shader *shader) {
	computeModelMatrix();
	glUniformMatrix4fv(shader->loc_model_matrix, 1, false, glm::value_ptr(Model));
	glUniform1ui(shader->loc_displacement_factor, displacement_factor);

	glBindVertexArray(VAO);
	glPatchParameteri(GL_PATCH_VERTICES, 3);
	glDrawElements(GL_PATCHES, n_indices, GL_UNSIGNED_INT, NULL);
	glBindVertexArray(0);

}
コード例 #19
0
ファイル: shader.cpp プロジェクト: sainteos/project-spero
 void Shader::setUniform<unsigned int>(const std::string& name, const unsigned int& data) {
   int prev_bound_program;
   glGetIntegerv(GL_CURRENT_PROGRAM, &prev_bound_program);
   if(name_to_location.count(name) == 0) {
     throw Exceptions::InvalidUniformNameException(name);
   }
   if(prev_bound_program != program_object)
     useProgram();
   glUniform1ui(name_to_location[name], data);
   if(prev_bound_program != program_object)
     glUseProgram(prev_bound_program);
 }
コード例 #20
0
void draw(Data*data){
  glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

  glUseProgram(data->program);

  glUniformMatrix4fv(data->mvpUniform,1,GL_FALSE,glm::value_ptr(data->mvp));
  glUniform1ui(data->modeUniform,data->mode);

  glBindVertexArray(data->vao);
  glDrawArrays(GL_TRIANGLES,0,3);
  glBindVertexArray(0);
}
コード例 #21
0
ファイル: Terrain.cpp プロジェクト: RoyKirk/AIEWork
void Terrain::Draw(unsigned int &m_program)
{
	glActiveTexture(GL_TEXTURE0);
	glBindTexture(GL_TEXTURE_2D, this->m_texture);

	glActiveTexture(GL_TEXTURE1);
	glBindTexture(GL_TEXTURE_2D, this->m_rockD);

	glActiveTexture(GL_TEXTURE2);
	glBindTexture(GL_TEXTURE_2D, this->m_rockN);

	glActiveTexture(GL_TEXTURE3);
	glBindTexture(GL_TEXTURE_2D, this->m_snowD);

	glActiveTexture(GL_TEXTURE4);
	glBindTexture(GL_TEXTURE_2D, this->m_snowN);
	
	unsigned int LightDirUniform = glGetUniformLocation(m_program, "LightDir");
	//glUniform3f(LightDirUniform, m_camera->getTransform()[3][0], m_camera->getTransform()[3][1], m_camera->getTransform()[3][2]);
	glUniform3f(LightDirUniform, light.x, light.y, light.z);
	//glUniform3f(LightDirUniform, 1, 1, 1);

	unsigned int LightColourUniform = glGetUniformLocation(m_program, "LightColour");
	glUniform3f(LightColourUniform, lightColour.x, lightColour.y, lightColour.z);

	unsigned int textureBlendUniform = glGetUniformLocation(m_program, "textureBlend");
	glUniform1f(textureBlendUniform, textureBlend);

	unsigned int diffuseUniform = glGetUniformLocation(m_program, "diffuse");
	glUniform1i(diffuseUniform, 0);

	diffuseUniform = glGetUniformLocation(m_program, "ground_textureD");
	glUniform1i(diffuseUniform, 1);

	unsigned int normalUniform = glGetUniformLocation(m_program, "ground_textureN");
	glUniform1i(normalUniform, 2);

	diffuseUniform = glGetUniformLocation(m_program, "snow_textureD");
	glUniform1i(diffuseUniform, 3);

	normalUniform = glGetUniformLocation(m_program, "snow_textureN");
	glUniform1i(normalUniform, 4);

	unsigned int dimensionUniform = glGetUniformLocation(m_program, "dimension");
	glUniform1ui(dimensionUniform, this->dimension);

	glBindVertexArray(m_VAO);
	unsigned int indexCount = (dimension - 1)*(dimension - 1) * 6;
	glDrawElements(GL_TRIANGLES, indexCount, GL_UNSIGNED_INT, 0);
}
コード例 #22
0
ファイル: Renderer.cpp プロジェクト: emlowry/Billiards
	static void SetUniforms()
	{
		if (sg_loaded)
		{
			glUseProgram(sg_shaderID);
			glUniformMatrix4fv(sg_projectionViewLocation, 1, false, glm::value_ptr(Engine::GetProjectionViewMatrix()));
			glUniform3fv(sg_cameraPositionLocation, 1, &sg_cameraPosition[0]);
			glUniform3fv(sg_ambientLightLocation, 1, &sg_lightAmbient[0]);
			for (unsigned int i = 0; i < sg_lightCount; ++i)
				UpdateLight(i);
			glUniform1ui(sg_lightCountLocation, sg_lightCount);
			glUniform1i(sg_textureLocation, 0);
		}
	}
コード例 #23
0
ファイル: Renderer.cpp プロジェクト: emlowry/Billiards
	static void Render(const Model& a_model)
	{
		// Set uniform values
		SetUniforms();
		glUniformMatrix4fv(sg_modelLocation, 1, false, glm::value_ptr(a_model.modelMatrix));
		glUniform4fv(sg_diffuseColorLocation, 1, &(a_model.texture.diffuseColor[0]));
		glUniform4fv(sg_specularColorLocation, 1, &(a_model.texture.specularColor[0]));
		if (GL_TRUE == glIsTexture(a_model.texture.imageID))
		{
			glUniform1ui(sg_hasTextureLocation, GL_TRUE);
			glActiveTexture(GL_TEXTURE0);
			glBindTexture(GL_TEXTURE_2D, a_model.texture.imageID);
		}
		else
		{
			glUniform1ui(sg_hasTextureLocation, GL_FALSE);
		}

		// draw triangles
		glBindVertexArray(a_model.mesh.vertexArrayID);
		glDrawElements(GL_TRIANGLES, a_model.mesh.indexCount, GL_UNSIGNED_INT, 0);
		glBindVertexArray(0);
	}
コード例 #24
0
ファイル: cpuEmu.cpp プロジェクト: kireisun/chip8
void chip8::setupTexture()
{	
	glGenVertexArrays(1, &VAOHandles[0]);
	glBindVertexArray(VAOHandles[0]);

	glGenBuffers(1, &VBOHandles[0]);
	glBindBuffer(GL_ARRAY_BUFFER, VBOHandles[0]);
	glBufferData(GL_ARRAY_BUFFER, sizeof(vertex) + sizeof(texCoordinates), NULL, GL_STATIC_DRAW);
	glBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(vertex), vertex);
	glBufferSubData(GL_ARRAY_BUFFER, sizeof(vertex), sizeof(texCoord), texCoordinates);

	glGenBuffers(1, elemIndHandles);
	glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, elemIndHandles[0]);
	glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(vertexIndex), vertexIndex, GL_STATIC_DRAW);

	glGenTextures(1, &texBufferHandles[0]);
	glActiveTexture(GL_TEXTURE0);
	glBindTexture(GL_TEXTURE_2D, texBufferHandles[0]);
	glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGBA8, SCREEN_WIDTH, SCREEN_HEIGTH);
	glTexSubImage2D(GL_TEXTURE_2D, 0,
		0, 0,
		SCREEN_WIDTH, SCREEN_HEIGTH,
		GL_RGBA, GL_UNSIGNED_BYTE, (GLvoid*)gfx);

	loadShaderProgram();

	uniformBuffHandles[0] = glGetUniformLocation(pHandle, "tex");
	glUniform1ui(uniformBuffHandles[0], 0);

	glVertexAttribPointer(vertexPos, 2, GL_FLOAT, GL_FALSE, 0, 0);
	glEnableVertexAttribArray(vertexPos);

	glVertexAttribPointer(texCoord, 2, GL_FLOAT, GL_FALSE, 0, BUFFER_OFFSET(vertex));
	glEnableVertexAttribArray(texCoord);

	glBindBuffer(GL_ARRAY_BUFFER, VBOHandles[0]);
	glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, elemIndHandles[0]);
	glBindTexture(GL_TEXTURE_2D, texBufferHandles[0]);

	glBindVertexArray(0);

	glClear(GL_COLOR_BUFFER_BIT);

	glActiveTexture(GL_TEXTURE0);
	glBindVertexArray(VAOHandles[0]);

	glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);
	glutSwapBuffers();
}
コード例 #25
0
void ParticleManager::loadUintUniform(GLuint shaderProgramID, std::string name, GLuint value){
	glGetError();

	int _uniID = glGetUniformLocation(shaderProgramID, name.c_str());

	if(glGetError() != GL_NO_ERROR){
		throw std::exception(("ERROR: Could not get "+name+"-uniform-location!").c_str());
	}

	glUniform1ui(_uniID, value);

	if(glGetError() != GL_NO_ERROR){
		throw std::exception(("ERROR: Could not update "+name+"-uniform-location!").c_str());
	}
}
コード例 #26
0
ファイル: teatime.c プロジェクト: stealthylabs/teatime
int teatime_run_program(teatime_t *obj, const uint32_t ikey[4], uint32_t rounds)
{
    if (obj && obj->program > 0) {
        int rc = 0;
        do {
            glUseProgram(obj->program);
            TEATIME_BREAKONERROR(glUseProgram, rc);
            glActiveTexture(GL_TEXTURE0);	
            TEATIME_BREAKONERROR(glActiveTexture, rc);
            glBindTexture(GL_TEXTURE_2D, obj->itexid);
            TEATIME_BREAKONERROR(glBindTexture, rc);
            glUniform1i(obj->locn_input, 0);
            TEATIME_BREAKONERROR(glUniform1i, rc);
            glActiveTexture(GL_TEXTURE1);	
            TEATIME_BREAKONERROR(glActiveTexture, rc);
            glBindTexture(GL_TEXTURE_2D, obj->otexid);
            TEATIME_BREAKONERROR(glBindTexture, rc);
            glUniform1i(obj->locn_output, 1);
            TEATIME_BREAKONERROR(glUniform1i, rc);
            glUniform4uiv(obj->locn_key, 1, ikey);
            TEATIME_BREAKONERROR(glUniform1uiv, rc);
            glUniform1ui(obj->locn_rounds, rounds);
            TEATIME_BREAKONERROR(glUniform1ui, rc);
            glFinish();
            glPolygonMode(GL_FRONT, GL_FILL);
            /* render */
            glBegin(GL_QUADS);
                glTexCoord2i(0, 0);
                glVertex2i(0, 0);
                //glTexCoord2i(obj->tex_size, 0);
                glTexCoord2i(1, 0);
                glVertex2i(obj->tex_size, 0);
                //glTexCoord2i(obj->tex_size, obj->tex_size);
                glTexCoord2i(1, 1);
                glVertex2i(obj->tex_size, obj->tex_size);
                glTexCoord2i(0, 1);
                //glTexCoord2i(0, obj->tex_size);
                glVertex2i(0, obj->tex_size);
            glEnd();
            glFinish();
            TEATIME_BREAKONERROR_FB(Rendering, rc);
            TEATIME_BREAKONERROR(Rendering, rc);
            rc = 0;
        } while (0);
        return rc;
    }
    return -EINVAL;
}
コード例 #27
0
void ScanSystem::combineWithOffsets(GLuint elements, const Buffer& output, const Buffer& offsets )
{
  //assert((elements % 4) == 0);
  assert(elements * sizeof(GLuint) <= output.size);

  glUseProgram(programs.combine);
  glUniform1ui(0,elements);

  offsets.BindBufferRange(GL_SHADER_STORAGE_BUFFER, 1);
  output.BindBufferRange(GL_SHADER_STORAGE_BUFFER, 0);

  glMemoryBarrier(GL_SHADER_STORAGE_BARRIER_BIT);

  GLuint groups = snapdiv(elements,GROUPSIZE);
  assert(groups < maxGrpsCombine);
  glDispatchCompute(groups,1,1);
}
コード例 #28
0
void Shader::setUniform(int location, int type, const GLuint* val) const
{
  switch(type)
	{
	case GL_UNSIGNED_INT:
		glUniform1ui(location,val[0]);
		break;
	case GL_UNSIGNED_INT_VEC2:
		glUniform2ui(location,val[0],val[1]);
		break;
	case GL_UNSIGNED_INT_VEC3:
		glUniform3ui(location,val[0],val[1],val[2]);
		break;
	case GL_UNSIGNED_INT_VEC4:
		glUniform4ui(location,val[0],val[1],val[2],val[3]);
		break;
	}
}
コード例 #29
0
	void ShaderProgram::setLocalParamUInt(int i, unsigned int value)
	{
		if (shaders_supported())
		{
			const char *loc_strings[] = {"loci0", "loci1", "loci2", "loci3",
				"loci4", "loci5", "loci6", "loci7",
				"loci8", "loci9", "loci10", "loci11",
				"loci12", "loci13", "loci14", "loci15"};

			if (loc_ui[i] == -1)
			{
				loc_ui[i] = glGetUniformLocation(id_, loc_strings[i]);
				if (loc_ui[i] == -1)
					loc_ui[i]--;
			}
			if (loc_ui[i] >= 0)
				glUniform1ui(loc_ui[i], value);
		}
	}
コード例 #30
0
void scene_buildings::gpu_draw(base::frame_context * const ctx){
	base::hptimer timer;
	timer.start();
	if (base::cfg().no_cull){
		glDisable(GL_CULL_FACE);
	}
	
	glUseProgram(_prg);

	// this is only needed on AMD cards due to driver bug wich needs
	// to have attr0 array anabled
	//base::set_attr0_vbo_amd_wa();

	
	glQueryCounter(ctx->_time_queries[0], GL_TIMESTAMP);

	glUniformMatrix4fv(_prg_mvp, 1, GL_FALSE, glm::value_ptr(ctx->_mvp));
	glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, _indices_vbo);
	glUniform1i(_prg_tb_blocks, 0);
	glActiveTexture(GL_TEXTURE0);

	// bind scene texture buffers

	

	for (uint32 i = 0; i < _tiles.size(); i++){
		int x = _tiles[i]._tile_pos.x;
		int y = _tiles[i]._tile_pos.y;
		glUniform2i(_prg_tile_offset, x,y);
		glUniform1ui(_prg_total_count, _tiles[i]._blocks_count);
		glBindTexture(GL_TEXTURE_BUFFER, _tiles[i]._blocks_tb);
		glDrawElementsInstanced(GL_TRIANGLES, 
						10 * 3 * base::cfg().blocks_per_idc, 
						GL_UNSIGNED_INT, 
						0, 
						(_tiles[i]._blocks_count + base::cfg().blocks_per_idc - 1) / base::cfg().blocks_per_idc);
	}

	ctx->_cpu_render_time = timer.elapsed_time();

	glQueryCounter(ctx->_time_queries[1], GL_TIMESTAMP);
}