소스 검색

Rendering and quality changes

Panagiotis Christopoulos Charitos 11 년 전
부모
커밋
1fc8008355

+ 3 - 0
include/anki/gl/GlCommandBufferHandle.h

@@ -130,6 +130,9 @@ public:
 	/// Set polygon mode
 	void setPolygonMode(GLenum face, GLenum mode);
 
+	/// Enable/diable point size in vertex/geometry shaders.
+	void enablePointSize(Bool enable);
+
 	/// Bind many textures
 	/// @param first The unit where the first texture will be bound.
 	/// @param textures The array of textures.

+ 13 - 12
include/anki/renderer/Renderer.h

@@ -98,16 +98,21 @@ public:
 		return m_height;
 	}
 
-	U32 getWindowWidth() const
+	U32 getDefaultFramebufferWidth() const
 	{
 		ANKI_ASSERT(!m_isOffscreen);
-		return m_width / m_renderingQuality;
+		return m_defaultFbWidth;
 	}
 
-	U32 getWindowHeight() const
+	U32 getDefaultFramebufferHeight() const
 	{
 		ANKI_ASSERT(!m_isOffscreen);
-		return m_height / m_renderingQuality;
+		return m_defaultFbHeight;
+	}
+
+	F32 getRenderingQuality() const
+	{
+		return m_renderingQuality;
 	}
 
 	F32 getAspectRatio() const
@@ -162,11 +167,6 @@ public:
 		return m_tessellation;
 	}
 
-	F32 getRenderingQuality() const
-	{
-		return m_renderingQuality;
-	}
-
 	const UVec2& getTilesCount() const
 	{
 		return m_tilesCount;
@@ -271,15 +271,16 @@ private:
 	Tiler m_tiler;
 	/// @}
 
-	/// Width of the rendering. Don't confuse with the window width
 	U32 m_width;
-	/// Height of the rendering. Don't confuse with the window height
 	U32 m_height;
+	U32 m_defaultFbWidth;
+	U32 m_defaultFbHeight;
+	F32 m_renderingQuality;
+
 	F32 m_lodDistance; ///< Distance that used to calculate the LOD
 	U8 m_samples; ///< Number of sample in multisampling
 	Bool8 m_isOffscreen; ///< Is offscreen renderer?
 	Bool8 m_tessellation;
-	F32 m_renderingQuality; ///< Rendering quality. Relevant for offscreen 
 	UVec2 m_tilesCount;
 
 	/// @name For drawing a quad into the active framebuffer

+ 1 - 1
include/anki/util/Thread.h

@@ -11,7 +11,7 @@
 #include "anki/util/NonCopyable.h"
 #include <atomic>
 
-#define ANKI_DISABLE_THREADPOOL_THREADING 1
+#define ANKI_DISABLE_THREADPOOL_THREADING 0
 
 namespace anki {
 

+ 6 - 0
src/gl/GlCommandBufferHandle.cpp

@@ -413,6 +413,12 @@ void GlCommandBufferHandle::setPolygonMode(GLenum face, GLenum mode)
 	ANKI_STATE_CMD_2(GLenum, glPolygonMode, face, mode);
 }
 
+//==============================================================================
+void GlCommandBufferHandle::enablePointSize(Bool enable)
+{
+	ANKI_STATE_CMD_ENABLE(GL_PROGRAM_POINT_SIZE, enable);
+}
+
 //==============================================================================
 class BindTexturesCommand: public GlCommand
 {

+ 3 - 1
src/renderer/Is.cpp

@@ -804,7 +804,9 @@ void Is::setState(GlCommandBufferHandle& cmdBuff)
 	if(drawToDefaultFbo)
 	{
 		m_r->getDefaultFramebuffer().bind(cmdBuff, true);
-		cmdBuff.setViewport(0, 0, m_r->getWindowWidth(), m_r->getWindowHeight());
+		cmdBuff.setViewport(0, 0, 
+			m_r->getDefaultFramebufferWidth(), 
+			m_r->getDefaultFramebufferHeight());
 	}
 	else
 	{

+ 13 - 18
src/renderer/MainRenderer.cpp

@@ -28,18 +28,11 @@ Error MainRenderer::create(
 	ResourceManager* resources,
 	GlDevice* gl,
 	HeapAllocator<U8>& alloc,
-	const ConfigSet& config_)
+	const ConfigSet& config)
 {
 	Error err = ErrorCode::NONE;
 	ANKI_LOGI("Initializing main renderer...");
 
-	ConfigSet config = config_;
-	config.set("offscreen", false);
-	config.set("width", 
-		config.get("width") * config.get("renderingQuality"));
-	config.set("height", 
-		config.get("height") * config.get("renderingQuality"));
-
 	err = Renderer::init(threadpool, resources, gl, alloc, config);
 	if(err) return err;
 
@@ -78,13 +71,15 @@ Error MainRenderer::render(SceneGraph& scene)
 	err = Renderer::render(scene, jobs);
 	if(err) return err;
 
-	Bool notDrawnToDefault = 
-		getRenderingQuality() != 1.0 || getDbg().getEnabled();
+	Bool alreadyDrawnToDefault = 
+		!getDbg().getEnabled()
+		&& getRenderingQuality() == 1.0;
 
-	if(notDrawnToDefault)
+	if(!alreadyDrawnToDefault)
 	{
 		getDefaultFramebuffer().bind(lastJobs, false);
-		lastJobs.setViewport(0, 0, getWindowWidth(), getWindowHeight());
+		lastJobs.setViewport(0, 0, 
+			getDefaultFramebufferWidth(), getDefaultFramebufferHeight());
 
 		m_blitPpline.bind(lastJobs);
 
@@ -127,16 +122,16 @@ Error MainRenderer::render(SceneGraph& scene)
 Error MainRenderer::initGl()
 {
 	// get max texture units
-	GlDevice& gl = _getGlDevice();
-	GlCommandBufferHandle jobs;
-	Error err = jobs.create(&gl);
+	GlCommandBufferHandle cmdb;
+	Error err = cmdb.create(&_getGlDevice());
 
 	if(!err)
 	{
-		jobs.enableCulling(true);
-		jobs.setCullFace(GL_BACK);
+		cmdb.enableCulling(true);
+		cmdb.setCullFace(GL_BACK);
+		cmdb.enablePointSize(true);
 
-		jobs.flush();
+		cmdb.flush();
 	}
 
 	return err;

+ 1 - 0
src/renderer/Ms.cpp

@@ -77,6 +77,7 @@ Error Ms::initInternal(const ConfigSet& initializer)
 		err = createRt(0, initializer.get("samples"));
 		if(err)	return err;
 	}
+
 	err = createRt(1, 1);
 	if(err)	return err;
 

+ 3 - 2
src/renderer/Pps.cpp

@@ -143,8 +143,9 @@ Error Pps::run(GlCommandBufferHandle& cmdBuff)
 	if(drawToDefaultFbo)
 	{
 		m_r->getDefaultFramebuffer().bind(cmdBuff, true);
-		cmdBuff.setViewport(
-			0, 0, m_r->getWindowWidth(), m_r->getWindowHeight());
+		cmdBuff.setViewport(0, 0, 
+			m_r->getDefaultFramebufferWidth(), 
+			m_r->getDefaultFramebufferHeight());
 	}
 	else
 	{

+ 7 - 3
src/renderer/Renderer.cpp

@@ -55,13 +55,17 @@ Error Renderer::initInternal(const ConfigSet& config)
 	Error err = ErrorCode::NONE;
 
 	// Set from the config
-	m_width = config.get("width");
-	m_height = config.get("height");
+	m_renderingQuality = config.get("renderingQuality");
+	m_defaultFbWidth = config.get("width");
+	m_defaultFbHeight = config.get("height");
+	m_width = m_defaultFbWidth * m_renderingQuality;
+	alignRoundDown(16, m_width);
+	m_height = m_defaultFbHeight * m_renderingQuality;
+	alignRoundDown(16, m_height);
 	m_lodDistance = config.get("lodDistance");
 	m_framesNum = 0;
 	m_samples = config.get("samples");
 	m_isOffscreen = config.get("offscreen");
-	m_renderingQuality = config.get("renderingQuality");
 	m_tilesCount.x() = config.get("tilesXCount");
 	m_tilesCount.y() = config.get("tilesYCount");
 

+ 1 - 1
testapp/Main.cpp

@@ -533,7 +533,7 @@ Error initSubsystems(int argc, char* argv[])
 	config.set("tilesXCount", 16);
 	config.set("tilesYCount", 16);
 
-	config.set("fullscreenDesktopResolution", true);
+	config.set("fullscreenDesktopResolution", false);
 	config.set("debugContext", false);
 
 	app = new App;