summaryrefslogtreecommitdiffstats
path: root/o3d/core/cross/renderer.h
diff options
context:
space:
mode:
authorgman@google.com <gman@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2009-08-25 00:18:47 +0000
committergman@google.com <gman@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2009-08-25 00:18:47 +0000
commit2976fe30ed9e0454b0995456e64a5ef7ae216df8 (patch)
tree5194cf65778a90b5a277df3d635b8164da39bb50 /o3d/core/cross/renderer.h
parentc874da66d375909e04eb2a0aba669b162c41faba (diff)
downloadchromium_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.h113
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