Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »dot« (28.08.2012, 16:29)
Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von »dot« (29.08.2012, 11:51)
C-/C++-Quelltext |
|
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 |
#include "../common/cpu_bitmap.h" #include "../common/cpu_anim.h" #include "../common/book.h" #include "math.h" #include "stdio.h" const int DIM = 500; struct DataBlock { unsigned char *dev_bitmap; CPUAnimBitmap *bitmap; }; __device__ float cosinus( float y1) { return cos(y1 / 2000); } __device__ float sinus( float x1) { return sin(x1 / 500); } __device__ float rechnung1( float z1) { z1 = 1400 - z1; return (150 - z1 / 10) / 150; } __device__ float rechnung2() { return 255 / 2; } __device__ float formel1(float zahl1, float sin1, float cos1, float zahl2 ) { return (zahl1 * (sin1 * cos1) * zahl2); } __global__ void kernel( unsigned char *ptr, int ticks, float d_wave[DIM][DIM]) { int x = threadIdx.x + blockIdx.x * blockDim.x; int y = threadIdx.y + blockIdx.y * blockDim.y; float x1 = threadIdx.x + blockIdx.x * blockDim.x + 530; float y1 = threadIdx.y + blockIdx.y * blockDim.y; float time = ticks; int offset = x + y * blockDim.x * gridDim.x; __syncthreads(); float sin1 = sinus(x1); float cos1 = cosinus(y1); float zahl1 = rechnung1(time); float zahl2 = rechnung2(); __syncthreads(); d_wave[x][y] = formel1(zahl1, sin1, cos1, zahl2); ptr[offset*4 + 0] = 0; ptr[offset*4 + 1] = 0; ptr[offset*4 + 2] = 255 * d_wave[x][y]; ptr[offset*4 + 3] = 255; } void generate_frame( DataBlock *d, int ticks) { dim3 blocks(DIM,DIM); float wave[DIM][DIM]; kernel<<<blocks,1>>>( d->dev_bitmap, ticks, wave); cudaMemcpy( d->bitmap->get_ptr(), d->dev_bitmap, d->bitmap->image_size(), cudaMemcpyDeviceToHost); } void cleanup( DataBlock *d) { cudaFree( d->dev_bitmap ); } int main( void ) { DataBlock data; CPUAnimBitmap bitmap( DIM, DIM, &data ); data.bitmap = &bitmap; cudaMalloc( (void**) &data.dev_bitmap, bitmap.image_size() ); bitmap.anim_and_exit( (void (*) (void*,int))generate_frame, (void (*)(void*))cleanup ); cudaFree( &data.dev_bitmap); } |
Ich denk das ist durchaus möglich. Ich weiß nicht, wieviel Einfluss du auf die CUDA Simulation hast. Im Idealfall könntest du natürlich direkt aus CUDA in einen Direct3D VertexBuffer schreiben, was im Prinzip 1:1 dem Simple Direct3D 9 Example aus dem CUDA SDK entspricht...
Also ansich hab ich vollen Einfluss, die Quellcodes sind mitgeliefert. Dummerweise nur die Quellcodes, es fehlen viele header auf die zwar verwiesen wird die aber nicht implementiert sind wie zum Beispiel bei dem viele d3dx9 Dateien in allen Formen und Größen.Ich denk das ist durchaus möglich. Ich weiß nicht, wieviel Einfluss du auf die CUDA Simulation hast. Im Idealfall könntest du natürlich direkt aus CUDA in einen Direct3D VertexBuffer schreiben, was im Prinzip 1:1 dem Simple Direct3D 9 Example aus dem CUDA SDK entspricht...
Werbeanzeige