Пример #1
0
void initShaders() {	
	//ASCH - 25/05/2016 - Initialisation des shaders	
	sm.init();
	shader_programme = sm.getShader_programme();
	vs = sm.getVertexShader(); 
	fs = sm.getFragShader();	
	
	//ASCH 25/05/2016 - Chargement des objets de scene
	for_each(objetsDeScene.begin(), objetsDeScene.end(), charger);
	
	/* A CONTROLER DANS LA CLASSE ObjetDeScene ou shaderManager
	//ASCH 24/09/2015 - Modification pour prendre en compte le multiobjet
	printf("---- taille : %d\n", objets.size());
	vao = new GLuint[objets.size()];

	//Création des tableaux en mémoire
	glGenVertexArrays (objets.size(), vao);
	
	// ASCH 20/04/2015 - Chargement des objets en mémoire graphique
	for(int i = 0; i < objets.size(); i++) {
		objets[i].construireVAO(vao[i], i);
		nbVertex += objets[i].getNbVertex();
	}	
	*/
}
Пример #2
0
void InitGL() {
	// Init opengl(depth test, blending, lighting and so on...)
	glEnable(GL_DEPTH_TEST);

	glClearColor(0,0,0,1);

	ShaderManager *sMan = ShaderManager::getDefaultManager();
	shader = sMan->createShader("C:/Andrea/GLSL/version130/prova2.vert", "C:/Andrea/GLSL/version130/prova2.geom", "C:/Andrea/GLSL/version130/prova2.frag");

	glGenVertexArrays(1, &vao); // create vao
	glGenBuffers(2, vbo); // create vbo

	glBindVertexArray(vao);

	int posLocation = shader->getAttributeLocation("in_Position");

	cout << posLocation << endl;

	//vertices position attribute
	glBindBuffer(GL_ARRAY_BUFFER, vbo[0]);
	glBufferData(GL_ARRAY_BUFFER, 12 * sizeof(GLfloat), vertices, GL_STATIC_DRAW);
	glVertexAttribPointer(posLocation, 3, GL_FLOAT, GL_FALSE, 0, 0);

	//vertices indices
	glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vbo[1]);
	glBufferData(GL_ELEMENT_ARRAY_BUFFER, 6 * sizeof(GLuint), indices, GL_STATIC_DRAW);

	glEnableVertexAttribArray(0);
	
	glBindVertexArray(0);
}
Пример #3
0
void InitZephyrModules()
{
  // A. Timer
  Core::Timer *mTimer = new Timer();
  mTimer->Initialize();
  mTimer->Reset();

  // B. Filesystem
  Core::FileSystem *fsMngr = new Core::Win32FileSystem();
  fsMngr->Initialize();

  // C. Input manager
  Input::SCTInputManager *inputMngr	= new Input::SCTInputManagerWin32(mHinst, mHwnd);
	inputMngr->Initialize();
  
	inputMngr->CreateKeyboardDevice();
	std::cout<<"$> Keyboard Device has been initialized\n";
  
	inputMngr->CreateMouseDevice();
  std::cout<<"$> Mouse Device has been initialized\n";

  // D. Shader manager
  ShaderManager *mShaderManager = new CgGLShaderManager();
  mShaderManager->SetDebugMode(true); // Always?
  mShaderManager->Initialize();
}
Пример #4
0
	GLBox()
	{
		App = new sf::Window(sf::VideoMode(RES_WIDTH, RES_HEIGHT, 32), "Bubbles!");

		// Setting up shaders
		FILE * logFile;
		logFile = fopen("log text", "wb");
		if(NULL == logFile)
		{
			printf("Unable to open log file. Exiting...\n");
			exit(2);
		}
		__glewInit(logFile);

		ShaderManager shaders = ShaderManager(logFile);
		char const * bubbleDrawVert = "BubbleShaders/bubbleRender3dModel.vert";
		char const * bubbleDrawFrag = "BubbleShaders/bubbleRender3dModel.frag";
		bubbleShaderProg = shaders.buildShaderProgram(&bubbleDrawVert, &bubbleDrawFrag, 1, 1);

		Clock = sf::Clock();
		mode = BUBBLE_MODE;
		gfxinit();

		while (App->IsOpened())
		{
			App->SetActive();
			handleEvents();
			setShader();
			setShaderVariables(bubbleShaderProg);
			display();
			App->Display();
		}

		fclose(logFile);
	}
Пример #5
0
/**
*	Draw scene
**/
void Scene::draw(ShaderManager & shaderManager)
{
	for(ModelVector::iterator it = modelVector.begin(); it != modelVector.end(); ++it)
	{
		
		if((*it) != 0)
		{
			// Only render transperent objects in the transperent stage
			if((*it)->isTransperent() && shaderManager.getStateManager().getRenderingStage() != StateManager::TRANSPARENCY_STAGE) continue;
			else if(!(*it)->isTransperent() && shaderManager.getStateManager().getRenderingStage() == StateManager::TRANSPARENCY_STAGE) continue;

			for(Model::EntityVector::iterator entIt = (*it)->getAllEntities().begin(); entIt != (*it)->getAllEntities().end(); ++entIt)
			{
				glPushMatrix();
				glTranslatef(entIt->position.x,entIt->position.y,entIt->position.z);
				glRotatef(entIt->rotation.w,entIt->rotation.x,entIt->rotation.y,entIt->rotation.z);
				glScalef(entIt->scale.x,entIt->scale.y,entIt->scale.z);
				shaderManager.updateModelviewPerspectiveMatrix();
				if(shaderManager.getStateManager().getRenderingStage() == StateManager::TRANSPARENCY_STAGE)
				{
					glm::mat4x4 tlMat = glm::translate(glm::mat4x4(1.0),entIt->position);
					//glm::mat4x4 rotMat = glm::rotate(tlMat, entIt->rotation.w,glm::vec3(entIt->rotation.x,entIt->rotation.y,entIt->rotation.z));
					//glm::mat4x4 scMat = glm::scale(rotMat, entIt->scale);
					shaderManager.setCgParam(tlMat,"modelMatrix",VERTEX);
				}
				(*it)->draw(shaderManager);
				glPopMatrix();
			}
		}
	}
}
Пример #6
0
void ShadowMapDemo::RenderScene( ShaderManager& shader_mgr )
{
//	m_pShadowMapManager->ShaderTechniqueForShadowCaster();

	GraphicsDevice().SetRenderState( RenderStateType::ALPHA_BLEND, false );
	GraphicsDevice().SetRenderState( RenderStateType::LIGHTING,    m_Lighting );

	shared_ptr<ShaderLightManager> pLightMgr = shader_mgr.GetShaderLightManager();
	if( pLightMgr )
		pLightMgr->CommitChanges();

	int num_mesh_rows = 5;
	for( int i=0; i<num_mesh_rows; i++ )
	{
		Matrix34 pose( Matrix34Identity() );
		pose.vPosition = Vector3( 0.0f, (float)i * 1.25f, (float)i * 5.0f + 2.0f );

		shader_mgr.SetWorldTransform( pose );

		shared_ptr<BasicMesh> pMesh = m_Mesh.GetMesh();
		if( pMesh )
			pMesh->Render( shader_mgr );
	}

	shader_mgr.SetWorldTransform( Matrix44Identity() );
	shared_ptr<BasicMesh> pFloor = m_FloorMesh.GetMesh();
	if( pFloor )
		pFloor->Render( shader_mgr );

//	PrimitiveShapeRenderer renderer;
//	renderer.SetShader(  );
//	renderer.RenderBox( Vector3( 100.0f, 0.1f, 100.0f ), Matrix34( Vector3(0.0f,-0.05f,0.0f), Matrix33Identity() ) );
}
/*************************************************
 * OpenGL initialization
 *************************************************/
static int initGL(WININFO *winInfo)
{
	char errorString[MAX_ERROR_LENGTH + 1];

	// Create openGL functions
	for (int i=0; i<NUM_GL_NAMES; i++) glFP[i] = (GenFP)wglGetProcAddress(glnames[i]);

	// Create and initialize the shader manager
	if (shaderManager.init(errorString))
	{
		MessageBox(winInfo->hWnd, errorString, "Shader Manager Load", MB_OK);
		return -1;
	}

	// Create and initialize everything needed for texture Management
	if (textureManager.init(errorString))
	{
		MessageBox(winInfo->hWnd, errorString, "Texture Manager Load", MB_OK);
		return -1;
	}

	// Create the text editor
	if (editor.init(&shaderManager, &textureManager, errorString))
	{
		MessageBox(winInfo->hWnd, errorString, "Editor init", MB_OK);
		return -1;
	}

	return 0;
}
Пример #8
0
/// Update light-related shader variables
void SetLightsToShader( CCopyEntity& entity, ShaderManager& rShaderMgr )
{
	shared_ptr<ShaderLightManager> pShaderLightMgr = rShaderMgr.GetShaderLightManager();

	int i, num_current_lights = entity.GetNumLights();
	LightEntity *pLightEntity = NULL;

	// clear any lights currenly stored in the shader light manager
	pShaderLightMgr->ClearLights();

	ShaderLightParamsWriter light_params_writer( pShaderLightMgr.get() );

	for( i=0; i<num_current_lights; i++ )
	{
		EntityHandle<LightEntity>& light_entity = entity.GetLight( i );
		LightEntity *pLightEntity = light_entity.GetRawPtr();
		if( !pLightEntity )
			continue;

//		pLightEntity->SetLightToShader( pShaderLightMgr );

		// copy light properties to the shader registers
		pLightEntity->GetLightObject()->Accept( light_params_writer );
	}

	pShaderLightMgr->CommitChanges();
}
Пример #9
0
// Just to get something on the screen, we'll just not subdivide correctly.
void drawBezier(int ucount, int vcount)
{
	u16 indices[3 * 3 * 6];
	float customUV[32];
	int c = 0;
	for (int y = 0; y < 3; y++) {
		for (int x = 0; x < 3; x++) {
			indices[c++] = y * 4 + x;
			indices[c++] = y * 4 + x + 1;
			indices[c++] = (y + 1) * 4 + x + 1;
			indices[c++] = (y + 1) * 4 + x + 1;
			indices[c++] = (y + 1) * 4 + x;
			indices[c++] = y * 4 + x;
		}
	}

	for (int y = 0; y < 4; y++) {
		for (int x = 0; x < 4; x++) {
			customUV[(y * 4 + x) * 2 + 0] = (float)x/3.0f;
			customUV[(y * 4 + x) * 2 + 1] = (float)y/3.0f;
		}
	}

	LinkedShader *linkedShader = shaderManager.ApplyShader();
	TransformAndDrawPrim(Memory::GetPointer(gstate.vertexAddr), &indices[0], GE_PRIM_TRIANGLES, 3 * 3 * 6, linkedShader, customUV, GE_VTYPE_IDX_16BIT);
}
Пример #10
0
	void draw(sf::RenderTarget &tg)
	{
		if (first)
		{
			rt.clear();
			rt.draw(sprite);
			rt.draw(logo);
			if (logo.getPosition().y == 0.0)rt.draw(press);

			if (check && timer.getElapsedTime().asSeconds() < 1)
			{
				if ((int)(rand() % 10) == 3) rt.clear(sf::Color::White);
			}
		}
		else
		{
			rt.clear(sf::Color::White);
			rt.draw(system);
			rt.draw(back2);
			rt.draw(pointer);
		}
		rt.display();
		sm.draw(rt, tg);
		if (first) tg.draw(v);
	};
Пример #11
0
int main(int argc, char** argv){
    StringHelper::init();
    Log >> new ConsoleLogger();
    //Set filter to include all.
    Log.setLevelFilter(LogManager::ll_Verbose);
    for(int i = 1; i < argc; i+=2){
        Log << argv[i];
        ShaderManager manager;
        manager.loadRaw(argv[i]);
        manager.save(argv[i+1]);
        ShaderManager saveTest;
        saveTest.load(argv[i+1]);
    }
    Log.close();
    return 0;
}
void CPURenderer::Draw(VolumeDataset &volume, ShaderManager &shaderManager, Camera &camera)
{
	GLuint shaderProgramID = shaderManager.UseShader(TextureShader);
	raycaster->Raycast(volume, transferFunction, shaderProgramID, camera);

	
}
void C2DPrimitiveRenderer_GL::Render( General2DVertex *paVertex, int num_vertices, PrimitiveType::Name primitive_type )
{
	ShaderHandle shader
		= sg_2DPrimitiveCommonShaders.GetShader( C2DPrimitiveCommonShaders::ST_DIFFUSE_COLOR );

	ShaderManager *pShaderMgr = shader.GetShaderManager();

	if( !pShaderMgr )
	{
		LOG_PRINT_ERROR( "The shader for 2D primitives is not available." );
		return;
	}

	pShaderMgr->Begin();

	RenderViaVertexAttribArray( paVertex, num_vertices, NULL, 0, ToGLPrimitiveType(primitive_type) );
}
Пример #14
0
static void RestoreOffsetWorldTransform( ShaderManager& rShaderManager )
{
	Matrix44 matWorld, matView;
	rShaderManager.GetWorldTransform( matWorld );
	rShaderManager.GetViewTransform( matView );

	matWorld(0,3) = s_OrigWorldPos.x;
	matWorld(1,3) = s_OrigWorldPos.y;
	matWorld(2,3) = s_OrigWorldPos.z;

	matView(0,3) = s_OrigViewTrans.x;
	matView(1,3) = s_OrigViewTrans.y;
	matView(2,3) = s_OrigViewTrans.z;

	rShaderManager.SetWorldTransform( matWorld );
	rShaderManager.SetViewTransform( matView );
}
Пример #15
0
ShaderProgram::ShaderProgram(std::string* fileName)
{
    this->name.assign(*fileName);
    this->status = true;

    this->id          = glCreateProgram();
    this->shaderCount = 0;

    ShaderManager*             shaderManager = ShaderManager::getShaderManager();
    std::vector<std::string*>* strings       = Util::Parsing::getStringArray(&this->name);
    int                        linkStatus    = 0;


    for(unsigned int index = 0; index < strings->size(); index++)
    {
        //Ignore blank and comment lines.
        if(Util::StringLib::isWhiteSpace((*strings)[index])       ||
           Util::StringLib::startsWith((*strings)[index], "\\\\") ||
           Util::StringLib::startsWith((*strings)[index], "#"))    
        {
            continue;
        }

        this->shaders[this->shaderCount] = shaderManager->getShader((*strings)[index]);
        glAttachShader(this->id, this->shaders[shaderCount]->id);
        this->shaderCount++;
    }

    glLinkProgram( this->id); 
    glGetProgramiv(this->id, GL_LINK_STATUS, &linkStatus);

    if(linkStatus == 0) //GL_FALSE
    {
        char* errorLogBuffer = NULL;
        int   errorLength    = 0;

        glGetProgramiv(this->id, GL_INFO_LOG_LENGTH, &errorLength);
        errorLogBuffer = new char[errorLength];
        memset(errorLogBuffer, 0, errorLength);
        glGetProgramInfoLog(this->id, errorLength, NULL, errorLogBuffer);

        Main::die(errorLogBuffer);
    }

    delete strings;
}
Пример #16
0
HRESULT MeshGroup::createDeviceStuffs(ID3D11Device* device)
{
	HRESULT hr = S_OK;
	hr = createBuffers(device);
	if (FAILED(hr)) return hr;

	ShaderManager shaderManager = ShaderManager::sharedShaderManager();

	for (auto kv : materials) {
		MeshMaterial *material = kv.second;
		if (material->hasTexture) {
			material->pixelShader = shaderManager.pixelShaderForTexture(device);
		} else {
			material->pixelShader = shaderManager.pixelShaderForNoTexture(device);
		}
	}
}
void C2DPrimitiveRenderer_GL::Render( const General2DVertex *pVertices, uint num_vertices, U16 *indices, uint num_indices, PrimitiveType::Name primitive_type, TextureHandle texture )
{
	ShaderHandle shader
		= sg_2DPrimitiveCommonShaders.GetShader( C2DPrimitiveCommonShaders::ST_DIFFUSE_COLOR_AND_TEXTURE );

	ShaderManager *pShaderMgr = shader.GetShaderManager();

	if( !pShaderMgr )
	{
		return;
	}

	pShaderMgr->SetTexture( 0, texture );

	pShaderMgr->Begin();

	RenderViaVertexAttribArray( pVertices, num_vertices, indices, num_indices, ToGLPrimitiveType(primitive_type) );
}
Пример #18
0
void FoliageMesh::StreamAllFoliage( Mesh* root )
{
	Lilith3D* lilith = Lilith3D::Instance();
	if ( lilith->RenderFoliage() && root )
	{
		L3PERFTRACK

		//const Vector3F& eye = lilith->GetCamera()->Eye();

		ShaderManager* shaderman = ShaderManager::Instance();
		const Shader* shader = shaderman->GetShader( ShaderManager::FOLIAGE_SHADER );

		L3State state;
		state.blend = true;
		state.shader = shader;

		// FIXME: choose a proper texture name for the foliage, and document that
		// all foliage needs to use the same texture.
		state.texture = TextureManager::Instance()->GetTexture( "grass1", 0 );
		StateManager::Enable( state );

		float fOffset = float( Lilith3D::GetTimeClock()->Msec() ) / 900.0f;
		shaderman->SetUniform( shader, "offset", fOffset );
		shaderman->SetUniform( shader, "eyeDirection", lilith->GetCamera()->Direction() );
		glColor4f( 1.0f, 1.0f, 1.0f, 1.0f );

		while ( root )
		{
			GLASSERT( root->Type() == FOLIAGEMESH );
			FoliageMesh* foliageMesh = (FoliageMesh*)root;
			
			// FIXME: PreStreamOut checks for cull - do our own culling, pull in the blending for
			// foliage much closer. (Also change the shader). 2 calls to OpenGL can be removed 
			// by setting the matrix rather than PUSH-MULT-POP
			//
			if ( foliageMesh->PreStreamOut( FOLIAGE_FADE, FOLIAGE_FADEOUT, 0 ) )
			{
				foliageMesh->GetStaticResource()->StreamOutVertex();
				foliageMesh->PostStreamOut();
			}
			root = root->nextRender;
		}
	}
}
Пример #19
0
void hleEnterVblank(u64 userdata, int cyclesLate)
{
	int vbCount = userdata;

	DEBUG_LOG(HLE, "Enter VBlank %i", vbCount);

	isVblank = 1;

	// Wake up threads waiting for VBlank
	__KernelTriggerWait(WAITTYPE_VBLANK, 0, true);

	// Trigger VBlank interrupt handlers.
	__TriggerInterrupt(PSP_VBLANK_INTR);

	CoreTiming::ScheduleEvent(msToCycles(vblankMs) - cyclesLate, leaveVblankEvent, vbCount+1);

	// TODO: Should this be done here or in hleLeaveVblank?
	if (framebufIsLatched) 
	{
		DEBUG_LOG(HLE, "Setting latched framebuffer %08x (prev: %08x)", latchedFramebuf.topaddr, framebuf.topaddr);
		framebuf = latchedFramebuf;
		framebufIsLatched = false;
	}

	// Yeah, this has to be the right moment to end the frame. Should possibly blit the right buffer
	// depending on what's set in sceDisplaySetFramebuf, in order to support half-framerate games -
	// an initial hack could be to NOT end the frame if the buffer didn't change? that should work okay.
	{
		host->EndFrame();

		host->BeginFrame();
		if (g_Config.bDisplayFramebuffer)
		{
			INFO_LOG(HLE, "Drawing the framebuffer");
			DisplayDrawer_DrawFramebuffer(framebuf.pspframebuf, framebuf.pspFramebufFormat, framebuf.pspFramebufLinesize);
		}

		shaderManager.DirtyShader();
		shaderManager.DirtyUniform(DIRTY_ALL);
	}

	// TODO: Find a way to tell the CPU core to stop emulating here, when running on Android.
}
LODManager::LODManager() {
  if (!EnabledLOD.Get())
    return;

  WorldSpace = 0;

  memset(Meshes, 0, sizeof(Meshes));
  memset(Colors, 0, sizeof(Colors));
  memset(Normals, 0, sizeof(Normals));

  memset(MeshIDs, 0xFE, sizeof(MeshIDs));
  memset(ColrIDs, 0xFE, sizeof(ColrIDs));
  memset(NormIDs, 0xFE, sizeof(NormIDs));

  ShaderManager *sm = ShaderManager::GetSingleton();

  /* look-ups will always be done with the original shader-address */
  if ((vNear = sm->GetBuiltInShader("LODNEAR.vso"))) {
    vNear->GetBinary(); vNear->ConstructDX9Shader(SHADER_REPLACED);
    vShader[GRID_FARNEAR] = vNear->pDX9VertexShader; }
  if ((pNear = sm->GetBuiltInShader("LODNEAR.pso"))) {
    pNear->GetBinary(); pNear->ConstructDX9Shader(SHADER_REPLACED);
    pShader[GRID_FARNEAR] = pNear->pDX9PixelShader; }

  /* look-ups will always be done with the original shader-address */
  if ((vFar = sm->GetBuiltInShader("LODFAR.vso"))) {
    vFar->GetBinary(); vFar->ConstructDX9Shader(SHADER_REPLACED);
    vShader[GRID_FARFAR] = vFar->pDX9VertexShader; }
  if ((pFar = sm->GetBuiltInShader("LODFAR.pso"))) {
    pFar->GetBinary(); pFar->ConstructDX9Shader(SHADER_REPLACED);
    pShader[GRID_FARFAR] = pFar->pDX9PixelShader; }

  /* look-ups will always be done with the original shader-address */
  if ((vInf = sm->GetBuiltInShader("LODINF.vso"))) {
    vInf->GetBinary(); vInf->ConstructDX9Shader(SHADER_REPLACED);
    vShader[GRID_FARINF] = vInf->pDX9VertexShader; }
  if ((pInf = sm->GetBuiltInShader("LODINF.pso"))) {
    pInf->GetBinary(); pInf->ConstructDX9Shader(SHADER_REPLACED);
    pShader[GRID_FARINF] = pInf->pDX9PixelShader; }

  /* look-ups will always be done with the original shader-address */
  if ((vWater = sm->GetBuiltInShader("LODWATER.vso"))) {
    vWater->GetBinary(); vWater->ConstructDX9Shader(SHADER_REPLACED);
    vShaderW = vWater->pDX9VertexShader; }
  if ((pWater = sm->GetBuiltInShader("LODWATER.pso"))) {
    pWater->GetBinary(); pWater->ConstructDX9Shader(SHADER_REPLACED);
    pShaderW = pWater->pDX9PixelShader; }
}
Пример #21
0
bool PSP_Init(const CoreParameter &coreParam, std::string *error_string)
{
	coreParameter = coreParam;
	currentCPU = &mipsr4k;
	numCPUs = 1;
	Memory::Init();
	mipsr4k.Reset();
	mipsr4k.pc = 0;

	if (coreParameter.enableSound)
	{
		host->InitSound(new PSPMixer());
	}

	// Init all the HLE modules
	HLEInit();

	// TODO: Check Game INI here for settings, patches and cheats, and modify coreParameter accordingly

	if (!LoadFile(coreParameter.fileToStart.c_str(), error_string))
	{
		pspFileSystem.UnmountAll();
		CoreTiming::ClearPendingEvents();
		CoreTiming::UnregisterAllEvents();
		__KernelShutdown();
		HLEShutdown();
		host->ShutdownSound();
		Memory::Shutdown();
		coreParameter.fileToStart = "";
		return false;
	}

	shaderManager.DirtyShader();
	shaderManager.DirtyUniform(DIRTY_ALL);

	// Setup JIT here.
	if (coreParameter.startPaused)
		coreState = CORE_STEPPING;
	else
		coreState = CORE_RUNNING;
	return true;
}
Пример #22
0
void InvertEffect::drawWindow(EffectWindow* w, int mask, QRegion region, WindowPaintData& data)
{
    // Load if we haven't already
    if (m_valid && !m_inited)
        m_valid = loadData();

    bool useShader = m_valid && (m_allWindows != m_windows.contains(w));
    if (useShader) {
        ShaderManager *shaderManager = ShaderManager::instance();
        shaderManager->pushShader(m_shader);

        data.shader = m_shader;
    }

    effects->drawWindow(w, mask, region, data);

    if (useShader) {
        ShaderManager::instance()->popShader();
    }
}
Пример #23
0
void ExplosionEffect::paintWindow(EffectWindow* w, int mask, QRegion region, WindowPaintData& data)
{
    // Make sure we have OpenGL compositing and the window is vidible and not a
    //  special window
    bool useshader = (mValid && mWindows.contains(w));
    if (useshader) {
        double maxscaleadd = 1.5f;
        double scale = 1 + maxscaleadd * mWindows[w];
        data.setXScale(scale);
        data.setYScale(scale);
        data.translate(int(w->width() / 2 * (1 - scale)), int(w->height() / 2 * (1 - scale)));
        data.multiplyOpacity(0.99);  // Force blending
        ShaderManager *manager = ShaderManager::instance();
        GLShader *shader = manager->pushShader(ShaderManager::GenericShader);
        QMatrix4x4 screenTransformation = shader->getUniformMatrix4x4("screenTransformation");
        manager->popShader();
        ShaderManager::instance()->pushShader(mShader);
        mShader->setUniform("screenTransformation", screenTransformation);
        mShader->setUniform("factor", (float)mWindows[w]);
        mShader->setUniform("scale", (float)scale);
        mShader->setUniform("windowSize", QVector2D(w->width(), w->height()));
        glActiveTexture(GL_TEXTURE4);
        mStartOffsetTex->bind();
        glActiveTexture(GL_TEXTURE5);
        mEndOffsetTex->bind();
        glActiveTexture(GL_TEXTURE0);
        data.shader = mShader;
    }

    // Call the next effect.
    effects->paintWindow(w, mask, region, data);

    if (useshader) {
        ShaderManager::instance()->popShader();
        glActiveTexture(GL_TEXTURE4);
        mStartOffsetTex->unbind();
        glActiveTexture(GL_TEXTURE5);
        mEndOffsetTex->unbind();
        glActiveTexture(GL_TEXTURE0);
    }
}
Пример #24
0
void Init()
{
	camera.Init(SCREEN_WIDTH, SCREEN_HEIGHT);
	shaderManager.Init();
	raycaster.Init(SCREEN_WIDTH, SCREEN_HEIGHT);

	fluid.Init();

	rawDataSize = gridXRes * gridYRes * gridZRes * sizeof(float);
	buffer = new char[rawDataSize];
	pixelBuffer = new char[SCREEN_WIDTH * SCREEN_HEIGHT * 4];
}
Пример #25
0
void Skybox::preRender( const RenderData* pData )
{
	ShaderManager* pShaderManager = GraphicsManager::GetInstance()->getShaderManager();

	pShaderManager->useProgram("skybox");

	glm::mat4x4 mModel = mat4(1.0f);
	glm::mat4x4 mViewProj, mModelViewProj;

	mModel = glm::translate(mModel, vec3(m_Pos.x, m_Pos.y, m_Pos.z));
	mModel = glm::scale(mModel, vec3(m_Scale.x, m_Scale.y, m_Scale.z));

	mModel = glm::rotate(mModel, m_Rot.x, vec3(1.0f, 0.0f, 0.0f));
	mModel = glm::rotate(mModel, m_Rot.y, vec3(0.0f, 1.0f, 0.0f));
	mModel = glm::rotate(mModel, m_Rot.z, vec3(0.0f, 0.0f, 1.0f));

	static GLint m4ModelViewProjLoc  = pShaderManager->getUniformLocation("uModelViewProj");

	mModelViewProj = pData->ViewProj * mModel;

	pShaderManager->setUniformMatrix4fv(m4ModelViewProjLoc, 1, &mModelViewProj);

	static GLint uTexLoc = pShaderManager->getUniformLocation("uTex");

	pShaderManager->setUniform1i(uTexLoc, 0);

	glActiveTexture(GL_TEXTURE0);
	mp_Tex->bind();
}
Пример #26
0
void GLES_GPU::CopyDisplayToOutput()
{
	if (!g_Config.bBufferedRendering)
		return;

	VirtualFramebuffer *vfb = GetDisplayFBO();
	fbo_unbind();

	glViewport(0, 0, PSP_CoreParameter().pixelWidth, PSP_CoreParameter().pixelHeight);

	currentRenderVfb_ = 0;

	if (!vfb) {
		DEBUG_LOG(HLE, "Found no FBO! displayFBPtr = %08x", displayFramebufPtr_);
		// No framebuffer to display! Clear to black.
		glClearColor(0,0,0,1);
		glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
		return;
	}

	DEBUG_LOG(HLE, "Displaying FBO %08x", vfb->fb_address);
	glDisable(GL_BLEND);
	glDisable(GL_CULL_FACE);
	glDisable(GL_DEPTH_TEST);

	fbo_bind_color_as_texture(vfb->fbo, 0);

	// These are in the output pixel coordinates
	DrawActiveTexture(480, 272, true);

	shaderManager.DirtyShader();
	shaderManager.DirtyUniform(DIRTY_ALL);
	gstate_c.textureChanged = true;

	// Restore some state
	ExecuteOp(gstate.cmdmem[GE_CMD_ALPHABLENDENABLE], 0xFFFFFFFF);		
	ExecuteOp(gstate.cmdmem[GE_CMD_CULLFACEENABLE], 0xFFFFFFFF);		
	ExecuteOp(gstate.cmdmem[GE_CMD_ZTESTENABLE], 0xFFFFFFFF);		
}
Пример #27
0
void render()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glUseProgram(sm.getDefaultShader());
    glBindVertexArray(vao);

    glDrawArrays(GL_TRIANGLES, 0, 3);

    //glDisableVertexAttribArray(0);

    glFlush();
}
void C2DPrimitiveRenderer_GL::RenderRect( ShaderManager& rShaderManager, C2DRect& rect )
{
	rShaderManager.Begin();
//	glUseProgram( 0 );

	glDisable( GL_CULL_FACE );

//	ushort triangle_fan[] = {0,1,2,3};
//	GLsizei num_indices = 4;

//	RenderViaVertexAttribArray( &(rect.GetVertex(0)), 4, triangle_fan, num_indices, GL_TRIANGLE_FAN );
	RenderViaVertexAttribArray( &(rect.GetVertex(0)), 4, NULL, 0, GL_TRIANGLE_FAN );
}
Пример #29
0
static void SetOffsetWorldTransform( ShaderManager& rShaderManager, Vector3& vWorldCameraPos )
{
	Matrix44 matWorld, matView;
	rShaderManager.GetWorldTransform( matWorld );
	rShaderManager.GetViewTransform( matView );
	s_OrigWorldPos  = Vector3( matWorld(0,3), matWorld(1,3), matWorld(2,3) );
	s_OrigViewTrans = Vector3( matView(0,3),  matView(1,3),  matView(2,3) );

//	if( !pCamera )
//		return;

	matView(0,3) = matView(1,3) = matView(2,3) = 0;
	
	Vector3 cam_pos = vWorldCameraPos;//pCamera->GetPosition();
	matWorld(0,3) = s_OrigWorldPos.x - cam_pos.x;
	matWorld(1,3) = s_OrigWorldPos.y - cam_pos.y;
	matWorld(2,3) = s_OrigWorldPos.z - cam_pos.z;

//	MsgBoxFmt( "world pos offset: ( %f, %f, %f )", matWorld._41, matWorld._42, matWorld._43 );

	rShaderManager.SetWorldTransform( matWorld );
	rShaderManager.SetViewTransform( matView );
}
Пример #30
0
  vector<Shader> parseShaders(YAML::Node const *node, vector<Shader> &defaultShaders, string const &directory, ShaderManager &shaderRes)
  {
    if(node == 0)
      return defaultShaders;

    vector<Shader> shaders;
    for(YAML::Iterator it = node->begin(); it != node->end(); ++it)
    {
      string shaderFile;
      (*it)["file"] >> shaderFile;
      shaders.push_back(shaderRes.request(directory + shaderFile));
    }

    return shaders;
  }