diff options
author | gman@google.com <gman@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-08-25 00:18:47 +0000 |
---|---|---|
committer | gman@google.com <gman@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-08-25 00:18:47 +0000 |
commit | 2976fe30ed9e0454b0995456e64a5ef7ae216df8 (patch) | |
tree | 5194cf65778a90b5a277df3d635b8164da39bb50 /o3d/core/cross/renderer.h | |
parent | c874da66d375909e04eb2a0aba669b162c41faba (diff) | |
download | chromium_src-2976fe30ed9e0454b0995456e64a5ef7ae216df8.zip chromium_src-2976fe30ed9e0454b0995456e64a5ef7ae216df8.tar.gz chromium_src-2976fe30ed9e0454b0995456e64a5ef7ae216df8.tar.bz2 |
Cleanup Renderer.
I believe there were some mis-understandings
about the code. It's supposed to work
StartRendering();
BeginDraw();
EndDraw();
BeginDraw();
EndDraw();
BeginDraw();
EndDraw();
FinishRendering();
To try to enforce correct usage I separated
some platform dependant stuff from shared
stuff and added a few flags.
Also in this CL I made Texture::GetRenderSurface
not require a pack. This is so I because it feels
cleaner that way but also because I wanted to
use surfaces without a pack to take a screenshot.
Finally I put some screenshot code in for GL.
Also fixed some bugs with locking textures.
1) I thought it was x, y, width, height but it's
actually x1, y1, x2, y2
2) I was using width in places I should have been
using mip_width
Review URL: http://codereview.chromium.org/174199
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@24188 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'o3d/core/cross/renderer.h')
-rw-r--r-- | o3d/core/cross/renderer.h | 113 |
1 files changed, 83 insertions, 30 deletions
diff --git a/o3d/core/cross/renderer.h b/o3d/core/cross/renderer.h index e0fdde9..8c850ab 100644 --- a/o3d/core/cross/renderer.h +++ b/o3d/core/cross/renderer.h @@ -171,16 +171,31 @@ class Renderer { virtual void Destroy() = 0; // Prepares the rendering device for subsequent draw calls. - virtual bool BeginDraw() = 0; - - // Notifies the renderer that the draw calls for this frame are completed. - virtual void EndDraw() = 0; - - // Does any pre-rendering preparation - virtual bool StartRendering() = 0; + // This is called during a RenderTree and can be called mutliple times + // during a single frame. + // NOTE: See StartRendering! + bool BeginDraw(); + + // This is called during a RenderTree and can be called mutliple times during + // a single frame. It gives the renderer a chance to flush state before + // returning to JavaScript if JavaScript is calling RenderTree directly. + // NOTE: See StartRendering! + void EndDraw(); + + // Does any pre-rendering preparation. + // The order of operations is + // StartRendering() + // BeginDraw(); + // EndDraw() + // BeginDraw(); + // EndDraw() + // BeginDraw(); + // EndDraw() + // FinishRendering(); // <- Presents the results. + bool StartRendering(); // Presents the results of the draw calls for this frame. - virtual void FinishRendering() = 0; + void FinishRendering(); // Returns whether a render is required. bool need_to_render() const { @@ -358,13 +373,26 @@ class Renderer { int height) = 0; // Returns the screen as a Bitmap. Will return a null reference on error. - virtual Bitmap::Ref TakeScreenshot() = 0; + Bitmap::Ref TakeScreenshot(); ServiceLocator* service_locator() const { return service_locator_; } // Returns the type of Param needed for a particular state. const ObjectBase::Class* GetStateParamType(const String& state_name) const; + // Whether we are currently rendering (between StartRendering / + // FinishRendering calls). + // NOTE: See StartRendering! + bool rendering() const { + return rendering_; + } + + // Whether we are currently drawing (between BeginDraw / EndDraw calls). + // NOTE: See StartRendering! + bool drawing() const { + return drawing_; + } + // Get the client area's width. int width() const { return width_; @@ -436,6 +464,10 @@ class Renderer { ++draw_elements_culled_; } + void IncrementDrawElementsRendered() { + ++draw_elements_rendered_; + } + void AddPrimitivesRendered(int amount_to_add) { primitives_rendered_ += amount_to_add; } @@ -542,6 +574,20 @@ class Renderer { int levels, bool enable_render_surfaces) = 0; + // The platform specific part of BeginDraw. + virtual bool PlatformSpecificBeginDraw() = 0; + + // The platform specific part of EndDraw. + virtual void PlatformSpecificEndDraw() = 0; + + // The platform specific part of StartRendering. + virtual bool PlatformSpecificStartRendering() = 0; + + // The platform specific part of EndRendering. + virtual void PlatformSpecificFinishRendering() = 0; + + virtual Bitmap::Ref PlatformSpecificTakeScreenshot() = 0; + // Sets the viewport. This is the platform specific version. virtual void SetViewportInPixels(int left, int top, @@ -553,25 +599,10 @@ class Renderer { // Sets the client's size. Derived classes must call this on Init and Resize. void SetClientSize(int width, int height); - // Whether we need to clear the entire client area next render. - bool clear_client_; - - // Whether a render is required. - bool need_to_render_; - // The current render surfaces. NULL = no surface. RenderSurface* current_render_surface_; RenderDepthStencilSurface* current_depth_surface_; - int render_frame_count_; // count of times we've rendered frame. - int transforms_processed_; // count of transforms processed this frame. - int transforms_culled_; // count of transforms culled this frame. - int draw_elements_processed_; // count of draw elements processed this frame. - int draw_elements_culled_; // count of draw elements culled this frame. - int draw_elements_rendered_; // count of draw elements culled this frame. - int primitives_rendered_; // count of primitives (tris, lines) - // rendered this frame. - Sampler::Ref error_sampler_; // sampler used when one is missing. Texture::Ref error_texture_; // texture used when one is missing. Texture::Ref fallback_error_texture_; // texture used when error_texture is @@ -591,12 +622,6 @@ class Renderer { // State object holding the default state settings. State::Ref default_state_; - // Current viewport setting. - Float4 viewport_; - - // Current depth range. - Float2 depth_range_; - // Lost Resources Callbacks. LostResourcesCallbackManager lost_resources_callback_manager_; @@ -617,6 +642,34 @@ class Renderer { ServiceImplementation<Renderer> service_; ServiceDependency<Features> features_; + // Current viewport setting. + Float4 viewport_; + + // Current depth range. + Float2 depth_range_; + + int render_frame_count_; // count of times we've rendered frame. + int transforms_processed_; // count of transforms processed this frame. + int transforms_culled_; // count of transforms culled this frame. + int draw_elements_processed_; // count of draw elements processed this frame. + int draw_elements_culled_; // count of draw elements culled this frame. + int draw_elements_rendered_; // count of draw elements culled this frame. + int primitives_rendered_; // count of primitives (tris, lines) + // rendered this frame. + + // Whether we need to clear the entire client area next render. + bool clear_client_; + + // Whether a render is required. + bool need_to_render_; + + // Whether we are currently rendering (between StartRendering / + // FinishRendering calls) + bool rendering_; + + // Whether or not we are drawing (between BeingDraw/EndDraw calls) + bool drawing_; + int width_; // width of the client area in pixels int height_; // height of the client area in pixels |