/// <summary> /// Constructs the font object using the desired font family. If the desired family /// is not supported, the fallback family defined in the Settings file is used. /// </summary> public Font(Renderer renderer, string familyName, int height) { this.renderer = renderer; this.familyName = familyName; this.height = height + 5; // Attempt to create the Windows font object try { windowsFont = new System.Drawing.Font(familyName, this.height, System.Drawing.FontStyle.Regular); } catch { // Attempt to create the font using the "fallback" font family // defined in the Settings file Log.Write("The desired font family was not available. Falling back on the default " + "family defined in the Settings file."); windowsFont = new System.Drawing.Font(Dynamic2DLighting.Properties.Settings.Default.FallbackFontFamily, this.height, System.Drawing.FontStyle.Regular); } d3dFont = new Direct3D.Font(renderer.Device, windowsFont); textSprite = new Direct3D.Sprite(renderer.Device); renderer.AddGraphicsObject(this); }
public Effect(Renderer renderer, string filename) { //if (!File.Exists(filename)) // throw new FileNotFoundException(filename); if (renderer == null) throw new ArgumentNullException("renderer", "Can't create an Effect without a valid renderer."); string compilationErrors = ""; try { effect = Direct3D.Effect.FromFile(renderer.Device, filename, null, null, null, ShaderFlags.None, null, out compilationErrors); } catch { Log.Write("Unable to create effect " + filename + ". The compilation errors were: \n\n" + compilationErrors); } renderer.AddGraphicsObject(this); }
/// <summary> /// Creates the texture from a file. /// </summary> /// <param name="renderer">The renderer.</param> /// <param name="filename">The name of the texture file to load.</param> public Texture(Renderer renderer, string filename) { if (renderer == null) throw new ArgumentNullException("renderer", "Unable to create texture without a valid renderer reference."); if (String.IsNullOrEmpty(filename)) throw new ArgumentNullException("filename", "Unable to create texture without valid filename."); // Add default extension if none is given if (Dynamic2DLighting.Properties.Settings.Default.DefaultTextureExtension.Length > 0 && StringHelper.GetExtension(filename).Length == 0) filename = filename + "." + Dynamic2DLighting.Properties.Settings.Default.DefaultTextureExtension; this.renderer = renderer; texFilename = filename; // Try to load the texture try { if (File.Exists(filename) == false) throw new FileNotFoundException(filename); ImageInformation imageInfo = TextureLoader.ImageInformationFromFile(filename); size = new Size(imageInfo.Width, imageInfo.Height); if (size.Width == 0 || size.Height == 0) throw new InvalidOperationException( "Image size=" + size + " is invalid, unable to create texture."); hasAlpha = imageInfo.Format == Format.Dxt5 || imageInfo.Format == Format.Dxt3 || imageInfo.Format.ToString().StartsWith("A"); d3dTexture = TextureLoader.FromFile(this.renderer.Device, filename); loaded = true; renderer.AddGraphicsObject(this); } catch (Exception ex) { loaded = false; Log.Write("Failed to load texture " + filename + ", will use empty texture! Error: " + ex.ToString()); } }
/// <summary> /// Creates the texture as a render target. /// </summary> public Texture(Renderer renderer, int width, int height, bool alpha) { if (renderer == null) throw new ArgumentNullException("renderer", "Unable to create texture without a valid renderer reference."); this.renderer = renderer; try { d3dTexture = new Microsoft.DirectX.Direct3D.Texture(renderer.Device, width, height, 1, Usage.RenderTarget, alpha ? Format.A8R8G8B8 : Format.X8R8G8B8, Pool.Default); d3dSurface = d3dTexture.GetSurfaceLevel(0); this.size = new Size(width, height); this.hasAlpha = alpha; loaded = true; renderer.AddGraphicsObject(this); } catch (Exception ex) { loaded = false; Log.Write("Failed to create texture as render target, will use empty texture!" + " Error: " + ex.ToString()); } }
/// <summary> /// Creates the mesh and allocates all the memory it will need. /// </summary> public Mesh(Renderer renderer, int numVertices, int numTriangles) { if (renderer == null) throw new ArgumentNullException("renderer", "Can't create mesh with an invalid renderer."); if (numVertices <= 0) throw new ArgumentOutOfRangeException("numVertices", numVertices, "Can't create mesh with zero or fewer " + "vertices."); if (numTriangles <= 0) throw new ArgumentOutOfRangeException("numTriangles", numTriangles, "Can't create mesh with zero or fewer " + "triangles."); this.renderer = renderer; this.numVertices = numVertices; this.numTriangles = numTriangles; vertices = new CustomVertex.PositionColoredTextured[numVertices]; if (vertices == null) throw new OutOfMemoryException("Unable to allocate vertex array for Mesh."); triangles = new Triangle[numTriangles]; if (triangles == null) throw new OutOfMemoryException("Unable to allocate triangle array for Mesh."); vertexBuffer = new VertexBuffer(typeof(CustomVertex.PositionColoredTextured), numVertices, renderer.Device, Usage.Dynamic | Usage.WriteOnly, CustomVertex.PositionColoredTextured.Format, Pool.Default); if (vertexBuffer == null) throw new DirectXException("Unable to create vertex buffer for Mesh."); indexBuffer = new IndexBuffer(typeof(short), 3 * numTriangles, renderer.Device, Usage.WriteOnly, Pool.Default); if (indexBuffer == null) throw new Direct3DXException("Unable to create index buffer for Mesh."); renderer.AddGraphicsObject(this); }