Problem with Texture and VertexBuffer in C#

opaque

Newcomer
Joined
Nov 1, 2003
Messages
2
Help.

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
//
InitializeComponent();

// everthing happens from here
try
{
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,
Microsoft.DirectX.Direct3D.DeviceType.Hardware,
parameters.BackBufferFormat, parameters.BackBufferFormat,
DepthFormat.D16))
{
parameters.AutoDepthStencilFormat = DepthFormat.D16;
parameters.EnableAutoDepthStencil = true;
}
else
{
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),
4,
device,
Usage.WriteOnly,
CustomVertex.TransformedTextured.Format,
Pool.Default);

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.BeginScene();

device.SetTexture(0, texture);
device.VertexFormat = CustomVertex.TransformedTextured.Format;
device.SetStreamSource(0, vb, 0);
device.DrawPrimitives(PrimitiveType.TriangleStrip, 0, 2);

device.EndScene();
device.Present();
Application.DoEvents();
}
Application.Exit();
}
catch (Exception exception)
{
System.Windows.Forms.MessageBox.Show(
exception.ToString(), "EXCEPTION: " + Application.ProductName,
System.Windows.Forms.MessageBoxButtons.OK);
}
}

/// <summary>
/// Clean up any resources being used.
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if(components != null)
{
components.Dispose();
}
}
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);

}
#endregion

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

private void Form_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
terminate = true;
}
}
 

Attachments

I'm just beginning here with managed dx, but when when I use TransformedTextured I must give 6 values for each for some reason (i copied from a tutorial)

x,y,z (never used), 1 (always 1),u,v

perhaps that will help you.

here's my tutorial adding a vertix


verts[i++] = new CustomVertex.TransformedTextured(
XPos + XSize, YPos, 0.5F, // Vertex position
1, // rhw (advanced)
1, 0); // texture coordinates


gl

/Rosecroix
 
Thank you Rosecroix!!!! It worked

All I did was add the Rhw property as you suggested and assign 1 to it for each index ...

CustomVertex.TransformedTextured[] data =
new CustomVertex.TransformedTextured[4];
data[0].X = 0.0f;
data[0].Y = 0.0f;
data[0].Z = 0.0f;
data[0].Rhw = 1;
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].Rhw = 1;
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].Rhw = 1;
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].Rhw = 1;
data[3].Tu = 1.0f;
data[3].Tv = 1.0f;
 
Back
Top