Problem with Texture and VertexBuffer

Posted on 2003-10-31
Medium Priority
Last Modified: 2013-12-26
I cannot get a background file to display properly in C# DirectX9 using a Vertex Buffer, Texture and TriangleList. This is supposed to be one of the simplest operations in DirectX and I have tried everything to get an image to display. It seems to be displaying only a very small portion of the image. What am I doing wrong?

Here is the code:

using System;
using System.Drawing;
using System.Windows.Forms;
using Microsoft.DirectX;
using Microsoft.DirectX.Direct3D;

/// <summary>
/// Summary description for Form.
/// </summary>
public class Form : System.Windows.Forms.Form
      /// <summary>
      /// Required designer variable.
      /// </summary>
      private System.ComponentModel.Container components = null;
      Microsoft.DirectX.Direct3D.Device device = null;
      PresentParameters parameters = new PresentParameters();

      bool terminate;
      Texture texture = null;
      VertexBuffer vb;

      public Form()
            // Required for Windows Form Designer support
            // everthing happens from here
                  this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
                  this.MaximizeBox = false;
                  this.MinimizeBox = false;
                  this.ControlBox = false;

                  // declare useful variables
                  Microsoft.DirectX.Direct3D.Caps caps;
                  Microsoft.DirectX.Direct3D.CreateFlags flags;

                  parameters = new PresentParameters();
                  parameters.BackBufferCount = 1;
                  parameters.SwapEffect = SwapEffect.Copy;
                  parameters.PresentationInterval = PresentInterval.Immediate;
                  parameters.BackBufferWidth = 1024;
                  parameters.BackBufferHeight = 768;
                  parameters.BackBufferFormat = Format.X8R8G8B8;

                  // check for, and specify, depth buffer
                  if (Microsoft.DirectX.Direct3D.Manager.CheckDepthStencilMatch(0,
                        parameters.BackBufferFormat, parameters.BackBufferFormat,
                        parameters.AutoDepthStencilFormat = DepthFormat.D16;
                        parameters.EnableAutoDepthStencil = true;
                        throw new Exception("This application requires an adapter with a 16-bit depth buffer.");

                  // examine the device capabilities
                  caps = Microsoft.DirectX.Direct3D.Manager.GetDeviceCaps(0, Microsoft.DirectX.Direct3D.DeviceType.Hardware);

                  flags = Microsoft.DirectX.Direct3D.CreateFlags.SoftwareVertexProcessing;
                  // attempt to create the device interface
                  device = new Microsoft.DirectX.Direct3D.Device(0, Microsoft.DirectX.Direct3D.DeviceType.Hardware, this, flags, parameters);
                  if (device == null) throw new Exception("Device was not allocated.");

                  vb = new VertexBuffer(typeof(CustomVertex.TransformedTextured),

                  texture = TextureLoader.FromFile(device, "menu.jpg");

                  CustomVertex.TransformedTextured[] data =
                        new CustomVertex.TransformedTextured[4];
                  data[0].X = 0.0f;
                  data[0].Y = 0.0f;
                  data[0].Z = 0.0f;
                  data[0].Tu = 0.0f;
                  data[0].Tv = 0.0f;
                  data[1].X = device.Viewport.Width;
                  data[1].Y = 0.0f;
                  data[1].Z = 0.0f;
                  data[1].Tu = 1.0f;
                  data[1].Tv = 0.0f;
                  data[2].X = 0.0f;
                  data[2].Y = device.Viewport.Height;
                  data[2].Z = 0.0f;
                  data[2].Tu = 0.0f;
                  data[2].Tv = 1.0f;
                  data[3].X = device.Viewport.Width;
                  data[3].Y = device.Viewport.Height;
                  data[3].Z = 0.0f;
                  data[3].Tu = 1.0f;
                  data[3].Tv = 1.0f;

                  vb.SetData(data, 0, 0);
                  terminate = false;
                  while (!terminate)      
                        device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Black, 1.0f, 0);
                        device.SetTexture(0, texture);
                        device.VertexFormat = CustomVertex.TransformedTextured.Format;
                        device.SetStreamSource(0, vb, 0);
                        device.DrawPrimitives(PrimitiveType.TriangleStrip, 0, 2);

            catch (Exception exception)
                        exception.ToString(), "EXCEPTION: " + Application.ProductName,

      /// <summary>
      /// Clean up any resources being used.
      /// </summary>
      protected override void Dispose( bool disposing )
            if( disposing )
                  if(components != null)
            base.Dispose( disposing );

      #region Windows Form Designer generated code
      /// <summary>
      /// Required method for Designer support - do not modify
      /// the contents of this method with the code editor.
      /// </summary>
      private void InitializeComponent()
            // Form
            this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
            this.ClientSize = new System.Drawing.Size(294, 268);
            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
            this.Name = "Form";
            this.Text = "Form";
            this.Closing += new System.ComponentModel.CancelEventHandler(this.Form_Closing);


      /// <summary>
      /// The main entry point for the application.
      /// </summary>
      static void Main()
                  Application.Run(new Form());
            catch (Exception)

      private void Form_Closing(object sender, System.ComponentModel.CancelEventArgs e)
            terminate = true;
Question by:0paque
1 Comment

Accepted Solution

Imhotep earned 750 total points
ID: 9708427
Hi 0paque,

I think the problem is that you place your vertices at a z of 0.0, this is too close. It gets culled by the near clipping plane. try setting it to a higher value, maybe 0.1 will do. To be sure, set the clipping planes manually.

Featured Post

The new generation of project management tools

With monday.com’s project management tool, you can see what everyone on your team is working in a single glance. Its intuitive dashboards are customizable, so you can create systems that work for you.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Artificial Intelligence comes in many forms, and for game developers, Path-Finding is an important ability for making an NPC (Non-Playable Character) maneuver through terrain.  A* is a particularly easy way to approach it.  I’ll start with the algor…
Recently, in one of the tech-blogs I usually read, I saw a post about the best-selling video games through history. The first place in the list is for the classic, extremely addictive Tetris. Well, a long time ago, in a galaxy far far away, I was…
Free Data Recovery software is an advanced solution from Kernel Tools to recover data and files such as documents, emails, database, media and pictures, etc. It supports recovery from physical & logical drive after a hard disk crash, accidental/inte…
If you are looking for an automated tool which can generate reports for Outlook emails and other items from PST file, then you can go for Kernel PST Reporter tool. The reports which are created by this tool are helpful to analyze and understand PST …
Suggested Courses

597 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question