1 package com.insanityengine.ghia.renderer;
2
3 import java.util.Stack;
4
5 import java.awt.*;
6
7 import java.applet.Applet;
8 import java.awt.Component;
9 import java.awt.image.ImageObserver;
10
11 import com.insanityengine.ghia.m3.*;
12 import com.insanityengine.ghia.libograf.*;
13 import com.insanityengine.ghia.pixels.*;
14 import com.insanityengine.ghia.renderer.*;
15
16 /***
17 *
18 * <P>
19 * Implements the RendererConsumerInterface.
20 * </P>
21 *
22 * @author BrianHammond
23 *
24 * $Header: /usr/local/cvsroot/ghia/src/java/com/insanityengine/ghia/renderer/RendererConsumer.java,v 1.5 2005/03/19 17:50:02 brian Exp $
25 *
26 */
27
28 public class RendererConsumer implements RendererConsumerInterface {
29
30
31
32 /***
33 *
34 * Constructor
35 *
36 */
37 public RendererConsumer() {
38 init( 0, 0, null );
39 }
40
41 /***
42 *
43 * Constructor
44 *
45 * @param width of the display
46 * @param height of the display
47 * @param component to use for graphics (yuck!)
48 *
49 */
50 public RendererConsumer( int width, int height, java.awt.Component component ) {
51 init( width, height, component );
52 }
53
54 /***
55 *
56 * Constructor, if m3_renderName parameter is defined for the
57 * Applet, it will attempt to use it with the createRenderer
58 * method
59 *
60 * @param applet which provides context
61 *
62 */
63 public RendererConsumer( Applet applet ) {
64 init( applet );
65 }
66
67 /***
68 *
69 * Initialize this RendererConsumer
70 *
71 * @param applet which provides context
72 *
73 */
74 public void init( Applet applet ) {
75 init(
76 applet.getSize().width,
77 applet.getSize().height,
78 applet
79 );
80 renderer.setDepthTesting( true );
81 renderer.setShadingMethod( M3_Constants.NONE_SHADE );
82 renderer.setShadingMethod( M3_Constants.PHONG_SHADE );
83 renderer.setShadingMethod( M3_Constants.NORM_SHADE );
84 }
85
86 /***
87 *
88 * Initialize this RendererConsumer
89 *
90 * @param width of the display
91 * @param height of the display
92 * @param component to use
93 *
94 */
95 public void init( int width, int height, java.awt.Component component ) {
96
97 w = width;
98 h = height;
99 this.component = component;
100
101 if ( 0 != width ) createRenderer();
102 if ( null != renderer ) renderer.setObserver( component );
103 }
104
105 /***
106 *
107 * Create a renderer with a given size
108 *
109 * @param width of the renderer to create
110 * @param height of the renderer to create
111 *
112 * @return true on success, false on fail
113 *
114 */
115 public final boolean createRenderer( int width, int height ) {
116 w = width;
117 h = height;
118 return createRenderer();
119 }
120
121 /***
122 *
123 * Try to create a renderer given the name of the class
124 * It will be initialized with the values passed into the init
125 * method of this LiboGraf instance
126 *
127 * @param nameOfRenderer to try to use
128 *
129 * @return true if succeds, else false
130 *
131 */
132 public final boolean createRenderer( String nameOfRenderer ) {
133
134 String cause = "unknown";
135 boolean success = false;
136
137 RendererInterface renderer = Renderer.getRendererByName( nameOfRenderer );
138 if ( null == renderer ) {
139 cause = "no rendererer named " + nameOfRenderer;
140 } else {
141 renderer.init( w, h, component );
142 this.renderer = renderer;
143 success = true;
144 }
145
146 if ( !success ) System.err.println( "RendererConsumer.createRenderer failed: " + cause );
147 else System.err.println( "RendererConsumer.createRenderer succeeded: " + nameOfRenderer );
148
149 return success;
150 }
151
152 /***
153 *
154 * Create a renderer of the default type using the values from
155 * sent to init
156 *
157 * @return true if succeds, else false
158 *
159 */
160 public final boolean createRenderer() {
161 String rname = null;
162 String pname = "m3_renderName";
163
164 if ( component instanceof Applet ) {
165 try {
166 rname = ( ( Applet ) component ).getParameter( pname );
167 } catch ( Exception e ) {
168 }
169 }
170
171 try {
172 if ( null == rname ) rname = System.getProperty( pname );
173 } catch ( Exception e ) {
174 }
175
176 if ( null == rname ) rname = "com.insanityengine.ghia.renderer.Memagery";
177 return createRenderer( rname );
178 }
179
180 /***
181 *
182 * Get the renderer
183 *
184 * @return the renderer
185 *
186 */
187 public final RendererInterface getRenderer() {
188 return renderer;
189 }
190
191 /***
192 *
193 * Set the renderer
194 *
195 * @param renderer to use
196 *
197 */
198 public final void setRenderer( RendererInterface renderer ) {
199 this.renderer = renderer;
200 w = renderer.getWidth();
201 h = renderer.getHeight();
202 }
203
204 /***
205 *
206 * Render the scene
207 *
208 */
209 public void render( LiboGraf gl ) {
210 renderer.render( gl );
211 }
212
213 /***
214 *
215 * Set the graphics to use
216 *
217 * @param graphics to use
218 *
219 */
220 public void setGraphics( Graphics graphics ) {
221 this.graphics = graphics;
222 }
223
224 /***
225 *
226 * Get the graphics
227 *
228 */
229 public Graphics getGraphics() {
230 return graphics;
231 }
232
233
234
235 protected int w = 0, h = 0;
236 private RendererInterface renderer = null;
237 private Component component = null;
238 private Graphics graphics = null;
239
240 };
241
242 /***
243 *
244 * $Log: RendererConsumer.java,v $
245 * Revision 1.5 2005/03/19 17:50:02 brian
246 * repackaging
247 *
248 * Revision 1.4 2004/09/11 14:56:06 brian
249 * use the Renderer.getRendererByName static method
250 *
251 * Revision 1.3 2004/09/11 14:44:59 brian
252 * each class should have an interface and vice versa...
253 *
254 * Revision 1.2 2004/09/11 14:37:21 brian
255 * added RendererConsumer and stuff
256 *
257 */