summaryrefslogtreecommitdiffstats
path: root/o3d/core/cross/render_event.h
blob: 3ced1d510d00308101b8b75669c830d41fa0693e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
/*
 * Copyright 2009, Google Inc.
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are
 * met:
 *
 *     * Redistributions of source code must retain the above copyright
 * notice, this list of conditions and the following disclaimer.
 *     * Redistributions in binary form must reproduce the above
 * copyright notice, this list of conditions and the following disclaimer
 * in the documentation and/or other materials provided with the
 * distribution.
 *     * Neither the name of Google Inc. nor the names of its
 * contributors may be used to endorse or promote products derived from
 * this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */


// This file defines the RenderEvent class.

#ifndef O3D_CORE_CROSS_RENDER_EVENT_H_
#define O3D_CORE_CROSS_RENDER_EVENT_H_

namespace o3d {

// This class is used to pass infomation to a registered onrender callback.
class RenderEvent {
 public:
  RenderEvent()
      : elapsed_time_(0.0f),
        render_time_(0.0f),
        active_time_(0.0f),
        transforms_processed_(0),
        transforms_culled_(0),
        draw_elements_processed_(0),
        draw_elements_culled_(0),
        draw_elements_rendered_(0),
        primitives_rendered_(0) {
  }

  // Use this function to get elapsed time since the last render event in
  // seconds.
  float elapsed_time() const {
    return elapsed_time_;
  }

  // The client will use this function to set the elapsed time. You should never
  // call this function.
  void set_elapsed_time(float time) {
    elapsed_time_ = time;
  }

  // Use this function to get the time it took to render the last frame.
  float render_time() const {
    return render_time_;
  }

  // The client will use this function to set the render time. You should never
  // call this function.
  void set_render_time(float time) {
    render_time_ = time;
  }

  // Use this function to get the time it took to both render the last frame.
  // and call the tick, counter and render callbacks.
  float active_time() const {
    return active_time_;
  }

  // The client will use this function to set the active time. You should never
  // call this function.
  void set_active_time(float time) {
    active_time_ = time;
  }

  // The number of transforms processed last frame.
  int transforms_processed() const {
    return transforms_processed_;
  }

  // The client uses this function to set this value
  void set_transforms_processed(int value) {
    transforms_processed_ = value;
  }

  // The number of transforms culled last frame.
  int transforms_culled() const {
    return transforms_culled_;
  }

  // The client uses this function to set this value
  void set_transforms_culled(int value) {
    transforms_culled_ = value;
  }

  // The number of draw elements processed last frame.
  int draw_elements_processed() const {
    return draw_elements_processed_;
  }

  // The client uses this function to set this value
  void set_draw_elements_processed(int value) {
    draw_elements_processed_ = value;
  }

  // The number of draw elements culled last frame.
  int draw_elements_culled() const {
    return draw_elements_culled_;
  }

  // The client uses this function to set this value
  void set_draw_elements_culled(int value) {
    draw_elements_culled_ = value;
  }

  // The number of draw elements rendered last frame. Note: a draw element can
  // be rendered more than once per frame based on how many transforms it is
  // under and how many DrawPasses use the DrawLists it is put on.
  int draw_elements_rendered() const {
    return draw_elements_rendered_;
  }

  // The client uses this function to set this value
  void set_draw_elements_rendered(int value) {
    draw_elements_rendered_ = value;
  }

  // The number of low-level primitives rendered last frame. This is the sum of
  // the number primitives (triangles, lines) submitted to the renderer.
  int primitives_rendered() const {
    return primitives_rendered_;
  }

  // The client uses this function to set this value
  void set_primitives_rendered(int value) {
    primitives_rendered_ = value;
  }
 private:
  // This is the elapsed time in seconds since the last render event.
  float elapsed_time_;

  // This is the time it took to render or rather, the time it took to submit
  // everything to D3D9 or GL and flip buffers.
  float render_time_;

  // The time it took to both render the last frame. and call the tick, counter
  // and render callbacks.
  float active_time_;

  int transforms_processed_;
  int transforms_culled_;
  int draw_elements_processed_;
  int draw_elements_culled_;
  int draw_elements_rendered_;
  int primitives_rendered_;
};

}  // namespace o3d

#endif  // O3D_CORE_CROSS_RENDER_EVENT_H_