mirror of
https://github.com/ClassiCube/ClassiCube.git
synced 2025-01-23 09:34:35 -05:00
184 lines
8 KiB
C#
184 lines
8 KiB
C#
// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel
|
|
//
|
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
// of this software and associated documentation files (the "Software"), to deal
|
|
// in the Software without restriction, including without limitation the rights
|
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
// copies of the Software, and to permit persons to whom the Software is
|
|
// furnished to do so, subject to the following conditions:
|
|
//
|
|
// The above copyright notice and this permission notice shall be included in
|
|
// all copies or substantial portions of the Software.
|
|
//
|
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
// THE SOFTWARE.
|
|
|
|
using System;
|
|
using OpenTK;
|
|
|
|
namespace SharpDX.Direct3D9
|
|
{
|
|
[InteropPatch]
|
|
public unsafe class Device : ComObject
|
|
{
|
|
public Device(IntPtr nativePtr) : base(nativePtr) {
|
|
}
|
|
|
|
public int TestCooperativeLevel() {
|
|
return Interop.Calli(comPointer,(*(IntPtr**)comPointer)[3]);
|
|
}
|
|
|
|
public uint AvailableTextureMemory {
|
|
get { return (uint)Interop.Calli(comPointer,(*(IntPtr**)comPointer)[4]); }
|
|
}
|
|
|
|
public void EvictManagedResources() {
|
|
int res = Interop.Calli(comPointer,(*(IntPtr**)comPointer)[5]);
|
|
if( res < 0 ) { throw new SharpDXException( res ); }
|
|
}
|
|
|
|
public Capabilities Capabilities {
|
|
get {
|
|
Capabilities caps = new Capabilities();
|
|
int res = Interop.Calli(comPointer, (IntPtr)(void*)&caps,(*(IntPtr**)comPointer)[7]);
|
|
if( res < 0 ) { throw new SharpDXException( res ); }
|
|
return caps;
|
|
}
|
|
}
|
|
|
|
public DisplayMode GetDisplayMode(int iSwapChain) {
|
|
DisplayMode modeRef = new DisplayMode();
|
|
int res = Interop.Calli(comPointer, iSwapChain, (IntPtr)(void*)&modeRef,(*(IntPtr**)comPointer)[8]);
|
|
if( res < 0 ) { throw new SharpDXException( res ); }
|
|
return modeRef;
|
|
}
|
|
|
|
public int Reset( PresentParameters presentParams ) {
|
|
return Interop.Calli(comPointer, (IntPtr)(void*)&presentParams,(*(IntPtr**)comPointer)[16]);
|
|
}
|
|
|
|
public int Present() {
|
|
return Interop.Calli(comPointer, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero,(*(IntPtr**)comPointer)[17]);
|
|
}
|
|
|
|
public Surface GetBackBuffer(int iSwapChain, int iBackBuffer, BackBufferType type) {
|
|
IntPtr backBufferOut = IntPtr.Zero;
|
|
int res = Interop.Calli(comPointer, iSwapChain, iBackBuffer, (int)type, (IntPtr)(void*)&backBufferOut,(*(IntPtr**)comPointer)[18]);
|
|
if( res < 0 ) { throw new SharpDXException( res ); }
|
|
return ( backBufferOut == IntPtr.Zero ) ? null : new Surface( backBufferOut );
|
|
}
|
|
|
|
public Texture CreateTexture(int width, int height, int levels, Usage usage, Format format, Pool pool) {
|
|
IntPtr pOut = IntPtr.Zero;
|
|
int res = Interop.Calli(comPointer, width, height, levels, (int)usage, (int)format, (int)pool, (IntPtr)(void*)&pOut, IntPtr.Zero,(*(IntPtr**)comPointer)[23]);
|
|
if( res < 0 ) { throw new SharpDXException( res ); }
|
|
return new Texture( pOut );
|
|
}
|
|
|
|
public DataBuffer CreateVertexBuffer(int length, Usage usage, VertexFormat vertexFormat, Pool pool) {
|
|
IntPtr pOut = IntPtr.Zero;
|
|
int res = Interop.Calli(comPointer, length, (int)usage, (int)vertexFormat, (int)pool, (IntPtr)(void*)&pOut, IntPtr.Zero,(*(IntPtr**)comPointer)[26]);
|
|
if( res < 0 ) { throw new SharpDXException( res ); }
|
|
return new DataBuffer( pOut );
|
|
}
|
|
|
|
public DataBuffer CreateIndexBuffer(int length, Usage usage, Format format, Pool pool) {
|
|
IntPtr pOut = IntPtr.Zero;
|
|
int res = Interop.Calli(comPointer, length, (int)usage, (int)format, (int)pool, (IntPtr)(void*)&pOut, IntPtr.Zero,(*(IntPtr**)comPointer)[27]);
|
|
if( res < 0 ) { throw new SharpDXException( res ); }
|
|
return new DataBuffer( pOut );
|
|
}
|
|
|
|
public void UpdateTexture(Texture srcTex, Texture dstTex) {
|
|
int res = Interop.Calli(comPointer, srcTex.comPointer, dstTex.comPointer,(*(IntPtr**)comPointer)[31]);
|
|
if( res < 0 ) { throw new SharpDXException( res ); }
|
|
}
|
|
|
|
public void GetRenderTargetData(Surface renderTarget, Surface dstSurface) {
|
|
int res = Interop.Calli(comPointer, renderTarget.comPointer, dstSurface.comPointer,(*(IntPtr**)comPointer)[32]);
|
|
if( res < 0 ) { throw new SharpDXException( res ); }
|
|
}
|
|
|
|
public Surface CreateOffscreenPlainSurface(int width, int height, Format format, Pool pool) {
|
|
IntPtr pOut = IntPtr.Zero;
|
|
int res = Interop.Calli(comPointer, width, height, (int)format, (int)pool, (IntPtr)(void*)&pOut, IntPtr.Zero,(*(IntPtr**)comPointer)[36]);
|
|
if( res < 0 ) { throw new SharpDXException( res ); }
|
|
return new Surface(pOut);
|
|
}
|
|
|
|
public void BeginScene() {
|
|
int res = Interop.Calli(comPointer,(*(IntPtr**)comPointer)[41]);
|
|
if( res < 0 ) { throw new SharpDXException( res ); }
|
|
}
|
|
|
|
public void EndScene() {
|
|
int res = Interop.Calli(comPointer,(*(IntPtr**)comPointer)[42]);
|
|
if( res < 0 ) { throw new SharpDXException( res ); }
|
|
}
|
|
|
|
public void Clear(ClearFlags flags, int colorBGRA, float z, int stencil) {
|
|
int res = Interop.Calli(comPointer, 0, IntPtr.Zero, (int)flags, colorBGRA, z, stencil, (*(IntPtr**)comPointer)[43]);
|
|
if( res < 0 ) { throw new SharpDXException( res ); }
|
|
}
|
|
|
|
public void SetTransform(TransformState state, ref Matrix4 matrixRef) {
|
|
int res;
|
|
fixed (void* matrixRef_ = &matrixRef)
|
|
res = Interop.Calli(comPointer, (int)state, (IntPtr)matrixRef_,(*(IntPtr**)comPointer)[44]);
|
|
if( res < 0 ) { throw new SharpDXException( res ); }
|
|
}
|
|
|
|
public void SetRenderState(RenderState renderState, bool enable) {
|
|
SetRenderState(renderState, enable ? 1 : 0);
|
|
}
|
|
|
|
public void SetRenderState(RenderState renderState, float value) {
|
|
SetRenderState(renderState, *(int*)&value);
|
|
}
|
|
|
|
public void SetRenderState(RenderState state, int value) {
|
|
int res = Interop.Calli(comPointer, (int)state, value,(*(IntPtr**)comPointer)[57]);
|
|
if( res < 0 ) { throw new SharpDXException( res ); }
|
|
}
|
|
|
|
public void SetTexture(int stage, Texture texture) {
|
|
int res = Interop.Calli(comPointer, stage, (texture == null)?IntPtr.Zero:texture.comPointer,(*(IntPtr**)comPointer)[65]);
|
|
if( res < 0 ) { throw new SharpDXException( res ); }
|
|
}
|
|
|
|
public void SetTextureStageState(int stage, TextureStage type, int value) {
|
|
int res = Interop.Calli(comPointer, stage, (int)type, value,(*(IntPtr**)comPointer)[67]);
|
|
if( res < 0 ) { throw new SharpDXException( res ); }
|
|
}
|
|
|
|
public void DrawPrimitives(PrimitiveType type, int startVertex, int primitiveCount) {
|
|
int res = Interop.Calli(comPointer, (int)type, startVertex, primitiveCount,(*(IntPtr**)comPointer)[81]);
|
|
if( res < 0 ) { throw new SharpDXException( res ); }
|
|
}
|
|
|
|
public void DrawIndexedPrimitives(PrimitiveType type, int baseVertexIndex, int minVertexIndex, int numVertices, int startIndex, int primCount) {
|
|
int res = Interop.Calli(comPointer, (int)type, baseVertexIndex, minVertexIndex, numVertices, startIndex, primCount,(*(IntPtr**)comPointer)[82]);
|
|
if( res < 0 ) { throw new SharpDXException( res ); }
|
|
}
|
|
|
|
public void SetVertexFormat(VertexFormat vertexFormat) {
|
|
int res = Interop.Calli(comPointer, (int)vertexFormat,(*(IntPtr**)comPointer)[89]);
|
|
if( res < 0 ) { throw new SharpDXException( res ); }
|
|
}
|
|
|
|
public void SetStreamSource(int streamNumber, DataBuffer streamData, int offsetInBytes, int stride) {
|
|
int res = Interop.Calli(comPointer, streamNumber,(streamData == null)?IntPtr.Zero:streamData.comPointer,offsetInBytes, stride,(*(IntPtr**)comPointer)[100]);
|
|
if( res < 0 ) { throw new SharpDXException( res ); }
|
|
}
|
|
|
|
public void SetIndices(DataBuffer indexData) {
|
|
int res = Interop.Calli(comPointer,(indexData == null)?IntPtr.Zero:indexData.comPointer,(*(IntPtr**)comPointer)[104]);
|
|
if( res < 0 ) { throw new SharpDXException( res ); }
|
|
}
|
|
}
|
|
}
|