void BoundsVisualiser::DestroyGeometry()
 {
     Eegeo_GL(glDeleteBuffers(1, &m_glVertexBuffer));
     Eegeo_GL(glDeleteBuffers(1, &m_glIndexBuffer));
     
     m_glVertexBuffer = 0;
     m_glIndexBuffer = 0;
 }
 void BoundsVisualiser::Draw(const Eegeo::v3& minExtents, const Eegeo::v3& maxExtents)
 {
     Build(minExtents, maxExtents);
     
     Eegeo_GL(glUseProgram(m_pShader->m_programHandle));
     
     Eegeo::m44 mvp;
     Eegeo::m44 w;
     w.Identity();
     Eegeo::m44::Mul(mvp, renderContext.GetViewProjectionMatrix(), w);
     
     Eegeo_GL(glUniformMatrix4fv(m_pShader->m_mvpUniform, 1, 0, (const GLfloat*)&mvp));
     
     Eegeo_GL(glEnableVertexAttribArray(m_pShader->m_positionSlot));
     
     Eegeo_GL(glBindBuffer(GL_ARRAY_BUFFER, m_glVertexBuffer));
     Eegeo_GL(glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_glIndexBuffer));
     
     Eegeo_GL(glVertexAttribPointer(m_pShader->m_positionSlot, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), 0));
     
     for(u32 j = 0; j < NumIndices; j+=3)
     {
         Eegeo_GL(glDrawElements(GL_LINE_LOOP, 3, GL_UNSIGNED_SHORT, (void*)(j * 2)));
     }
     
     Eegeo_GL(glBindBuffer (GL_ARRAY_BUFFER, 0));
     Eegeo_GL(glBindBuffer (GL_ELEMENT_ARRAY_BUFFER, 0));
     
     DestroyGeometry();
 }
 void HeatmapExample::Suspend()
 {
     m_heatmapController.Remove(*m_pSfCrimeHeatmap);
     delete m_pSfCrimeHeatmap;
     m_pSfCrimeHeatmap = NULL;
     
     if (m_heatmapTexture.textureId != 0)
     {
         Eegeo_GL(glDeleteTextures(1, &m_heatmapTexture.textureId));
     }
     
     if (m_gradientTexture.textureId != 0)
     {
         Eegeo_GL(glDeleteTextures(1, &m_gradientTexture.textureId));
     }
 }
 void BoundsVisualiser::CompileShaders()
 {
     std::string vertexShaderCode = VertexShader();
     std::string fragmentShaderCode = FragmentShader();
     
     GLuint vertexShader = Eegeo::Helpers::ShaderCompiler::CompileShader(vertexShaderCode, GL_VERTEX_SHADER);
     GLuint fragmentShader = Eegeo::Helpers::ShaderCompiler::CompileShader(fragmentShaderCode, GL_FRAGMENT_SHADER);
     
     m_pShader = new Shader;
     m_pShader->m_programHandle = glCreateProgram();
     glAttachShader(m_pShader->m_programHandle, vertexShader);
     glAttachShader(m_pShader->m_programHandle, fragmentShader);
     glLinkProgram(m_pShader->m_programHandle);
     
     GLint linkSuccess;
     glGetProgramiv(m_pShader->m_programHandle, GL_LINK_STATUS, &linkSuccess);
     if (linkSuccess == GL_FALSE)
     {
         GLchar messages[256];
         glGetProgramInfoLog(m_pShader->m_programHandle, sizeof(messages), 0, &messages[0]);
         Eegeo_TTY("%s\n", &messages[0]);
         return;
     }
     
     Eegeo_GL(glUseProgram(m_pShader->m_programHandle));
     
     m_pShader->m_positionSlot = glGetAttribLocation(m_pShader->m_programHandle, "pos");
     m_pShader->m_mvpUniform = glGetUniformLocation(m_pShader->m_programHandle, "mvp");
 }
 void ExampleMeshRenderable::Render(Eegeo::Rendering::GLState& glState) const
 {
     m_material->SetStatePerRenderable(this, glState);
     
     m_mesh.BindVertexBuffers(GetVertexBinding(), glState);
     
     Eegeo_GL(glDrawElements(GL_TRIANGLES, m_mesh.GetNumOfIndices(), GL_UNSIGNED_SHORT, (void*)(0)));
     
     m_mesh.UnbindVertexBuffers(glState);
 }
 void BoundsVisualiser::InitMeshGLBuffers(Vertex* verts, u16* indices)
 {
     Eegeo_GL(glGenBuffers(1, &m_glVertexBuffer));
     Eegeo_GL(glBindBuffer(GL_ARRAY_BUFFER, m_glVertexBuffer));
     Eegeo_GL(glBufferData(GL_ARRAY_BUFFER, (sizeof(Vertex) * NumVerts), verts, GL_STATIC_DRAW));
     Eegeo_GL(glBindBuffer (GL_ARRAY_BUFFER, 0));
     
     Eegeo_GL(glGenBuffers(1, &m_glIndexBuffer));
     Eegeo_GL(glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_glIndexBuffer));
     Eegeo_GL(glBufferData(GL_ELEMENT_ARRAY_BUFFER, (sizeof(u16) * NumIndices), indices, GL_STATIC_DRAW));
     Eegeo_GL(glBindBuffer (GL_ELEMENT_ARRAY_BUFFER, 0));
 }
            void VRDistortionRenderable::Render(Eegeo::Rendering::GLState& glState) const
            {
                m_material->SetStatePerRenderable(this, glState);
                m_pMesh->BindVertexBuffers(GetVertexBinding(), glState);
                const u32 indexCount = m_pMesh->GetNumOfIndices();

                Eegeo_ASSERT(indexCount != 0);
                Eegeo_GL(glDrawElements(GL_TRIANGLES, indexCount, GL_UNSIGNED_SHORT, (void*)(0)));
                m_pMesh->UnbindVertexBuffers(glState);
                
            }
Example #8
0
void AppRunner::Update(float deltaSeconds)
{
    if(m_pAppHost != NULL && m_displayService.IsDisplayAvailable())
    {
        m_pAppHost->Update(deltaSeconds);

        Eegeo_GL(eglSwapBuffers(m_displayService.GetDisplay(), m_displayService.GetSurface()));
        Eegeo::Helpers::GLHelpers::ClearBuffers();

        m_pAppHost->Draw(deltaSeconds);
    }
}
void GlDisplayService::ReleaseDisplay(bool destroyEGL)
{
    if (m_display != EGL_NO_DISPLAY)
    {
        Eegeo_GL(eglMakeCurrent(m_display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT));
        
        if (m_surface != EGL_NO_SURFACE)
        {
            Eegeo_GL(eglDestroySurface(m_display, m_surface));
        }
        
        if (m_sharedSurface != EGL_NO_SURFACE)
        {
            Eegeo_GL(eglDestroySurface(m_display, m_sharedSurface));
        }
        
        if(destroyEGL)
        {
            if (m_context != EGL_NO_CONTEXT)
            {
                Eegeo_GL(eglDestroyContext(m_display, m_context));
            }
            
            if(m_resourceBuildSharedContext != EGL_NO_CONTEXT)
            {
                Eegeo_GL(eglDestroyContext(m_display, m_resourceBuildSharedContext));
            }
            
            Eegeo_GL(eglTerminate(m_display));
            
            m_display = EGL_NO_DISPLAY;
            m_context = EGL_NO_CONTEXT;
            m_resourceBuildSharedContext = EGL_NO_CONTEXT;
        }
    }
    
    m_surface = EGL_NO_SURFACE;
    m_sharedSurface = EGL_NO_SURFACE;
    
    m_displayBound = false;
}
bool GlDisplayService::TryBindDisplay(ANativeWindow& window)
{
	EGLint w, h, dummy, format;
	EGLConfig config;
	EGLSurface surface;

	if (!DefaultEGLChooser(m_display, EGL_WINDOW_BIT, config))
	{
		Eegeo_ERROR("unable to find a good display type");
		return false;
	}

	eglGetConfigAttrib(m_display, config, EGL_NATIVE_VISUAL_ID, &format);

	ANativeWindow_setBuffersGeometry(&window, 0, 0, format);

	static const EGLint contextAttribs[] =
	{
		EGL_CONTEXT_CLIENT_VERSION,
		2,
		EGL_NONE
	};

	surface = eglCreateWindowSurface(m_display, config, &window, NULL);

	if(m_context == EGL_NO_CONTEXT)
	{
		m_context = eglCreateContext(m_display, config, NULL, contextAttribs);
	}

	if (eglMakeCurrent(m_display, surface, surface, m_context) == EGL_FALSE)
	{
		Eegeo_ERROR("Unable to eglMakeCurrent");
		return false;
	}

	//Eegeo_TTY("printing extensions\n");
	//char * extensionsString =  (char *) glGetString(GL_EXTENSIONS);
	//Eegeo_TTY("%s\n",extensionsString);

	Eegeo_GL(eglQuerySurface(m_display, surface, EGL_WIDTH, &w));
	Eegeo_GL(eglQuerySurface(m_display, surface, EGL_HEIGHT, &h));

	m_surface = surface;

#ifdef EEGEO_DROID_EMULATOR
	m_sharedSurface = EGL_NO_SURFACE;
	m_resourceBuildSharedContext = EGL_NO_CONTEXT;
#else
	if(m_resourceBuildSharedContext == EGL_NO_CONTEXT)
	{
		m_resourceBuildSharedContext = eglCreateContext(m_display, config, m_context, contextAttribs);
	}

	EGLint pBufferAttribs[] =
	{
		EGL_WIDTH, 1,
		EGL_HEIGHT, 1,
		EGL_TEXTURE_TARGET, EGL_NO_TEXTURE,
		EGL_TEXTURE_FORMAT, EGL_NO_TEXTURE,
		EGL_NONE
	};
	EGLConfig sharedSurfaceConfig;
	if (!DefaultEGLChooser(m_display, EGL_PBUFFER_BIT, sharedSurfaceConfig))
	{
		Eegeo_ERROR("unabled to find a good pbuffer surface type");
	}

	m_sharedSurface = eglCreatePbufferSurface(m_display, sharedSurfaceConfig, pBufferAttribs);
#endif
    
    w = w/2.0f;
    
	m_displayWidth = w;
	m_displayHeight = h;
    
	glViewport(0, 0, m_displayWidth, m_displayHeight);

	// Initialize GL state.
	Eegeo_GL(glClearDepthf(1.0f));
    Eegeo_GL(glClearColor(0.0f, 0.0f, 0.0f, 1.0f));

	// Set up default Depth test.
	Eegeo_GL(glEnable(GL_DEPTH_TEST));
	Eegeo_GL(glDepthMask(GL_TRUE));
	Eegeo_GL(glDepthFunc(GL_LEQUAL));

	// Set up default culling.
	Eegeo_GL(glEnable(GL_CULL_FACE));
	Eegeo_GL(glFrontFace(GL_CW));
	Eegeo_GL(glCullFace(GL_BACK));

	// Turn off the stencil test.
	Eegeo_GL(glDisable(GL_STENCIL_TEST));
	Eegeo_GL(glStencilFunc(GL_NEVER, 0, 0xFFFFFFFF));
	Eegeo_GL(glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP));

	// Set the default blend mode and colour mask.
	Eegeo_GL(glDisable(GL_BLEND));
	Eegeo_GL(glColorMask(true, true, true, true));

	Eegeo_GL(glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT));

	eglSwapInterval(m_display, 1);

	m_displayBound = true;

	return m_displayBound;
}