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
| public ref class Form1 : public System::Windows::Forms::Form
{
public:
Form1(void)
{
InitializeComponent();
this->SetStyle (ControlStyles::AllPaintingInWmPaint, true);
InitializeDirectX();
}
protected:
/// <summary>
/// Clean up any resources being used.
/// </summary>
~Form1()
{
delete device;
if (components)
{
delete components;
}
}
private:
/// <summary>
/// Required designer variable.
/// </summary>
System::ComponentModel::Container ^components;
#pragma 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>
void InitializeComponent(void)
{
this->SuspendLayout();
//
// Form1
//
this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
this->ClientSize = System::Drawing::Size(737, 629);
this->Name = L"Form1";
this->Text = L"Form1";
this->ResumeLayout(false);
}
#pragma endregion
protected:
Device^ device;
VertexBuffer^ myVertexBuffer;
protected:
bool InitializeDirectX() {
// Now setup our D3D stuff
PresentParameters^ presentParams = gcnew PresentParameters();
presentParams->IsWindowed = true;
presentParams->SwapEffect = SwapEffect::Discard;
device = gcnew Device(0, DeviceType::Hardware, this->Handle,
CreateFlags::SoftwareVertexProcessing, presentParams);
device->RenderState->CullMode = Cull::None;
device->VertexFormat = CustomVertex::TransformedColored::Format;
device->DeviceReset += gcnew EventHandler(this, &Form1::OnResetDevice);
this->OnResetDevice(device, EventArgs::Empty);
return true;
}
void OnResetDevice(Object^ sender, EventArgs^ e){
Device^ dev = (Device^)sender;
//Créer le vertex buffer pour 3 CustomVertex::TransformedColored
//OnCreateVertexBuffer() est appelé par ce constructeur
myVertexBuffer = gcnew VertexBuffer(dev, 3*CustomVertex::TransformedColored::StrideSize,
Usage::None, CustomVertex::TransformedColored::Format, Pool::Default,
gcnew EventHandler(this, &Form1::OnCreateVertexBuffer));
}
void OnCreateVertexBuffer(Object^ sender, EventArgs^ e){
VertexBuffer^ vb = dynamic_cast<VertexBuffer^>(sender);
//insérer les sommets dans le buffer
DirectX::Generic::GraphicsBuffer<CustomVertex::TransformedColored>^ buffer;
buffer = vb->Lock<CustomVertex::TransformedColored>(0, 3, LockFlags::None);
buffer[0] = CustomVertex::TransformedColored(20, 20, 0.5f, 1, Color::Aqua);
buffer[1] = CustomVertex::TransformedColored(100, 20, 0.5f, 1, Color::Beige);
buffer[2] = CustomVertex::TransformedColored(50, 100, 0.5f ,1, Color::OrangeRed);
vb->Unlock();
}
virtual void OnPaint(PaintEventArgs^ e) override{
if (device == nullptr)
return;
device->Clear(ClearFlags::Target, Color::Black, 1.0f, 0);
device->BeginScene();
device->SetStreamSource(0, myVertexBuffer, 0);
device->VertexFormat = CustomVertex::TransformedColored::Format;
device->DrawPrimitives(PrimitiveType::TriangleList, 0, 1);
device->EndScene();
device->Present();
}
}; |
Partager