00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #include <string.h>
00028 #include <stdlib.h>
00029 #include <stdio.h>
00030 #include <math.h>
00031
00032 #include "Scene.h"
00033 #include "DispCmds.h"
00034 #include "utilities.h"
00035 #include "Matrix4.h"
00036 #include "VMDDisplayList.h"
00037
00038
00039
00040
00041 void DispCmdTriMesh::cuda_putdata(const float * vertices_d,
00042 const float * normals_d,
00043 const float * colors_d,
00044 int num_facets,
00045 VMDDisplayList * dobj) {
00046
00047 DispCmdTriMesh *ptr;
00048 if (colors_d == NULL) {
00049 ptr = (DispCmdTriMesh *)
00050 (dobj->append(DTRIMESH_C3F_N3F_V3F, sizeof(DispCmdTriMesh) +
00051 sizeof(float) * num_facets * 3 * 6));
00052 } else {
00053 ptr = (DispCmdTriMesh *)
00054 (dobj->append(DTRIMESH_C3F_N3F_V3F, sizeof(DispCmdTriMesh) +
00055 sizeof(float) * num_facets * 3 * 9));
00056 }
00057
00058 if (ptr == NULL)
00059 return;
00060
00061 ptr->numverts=num_facets * 3;
00062 ptr->numfacets=num_facets;
00063
00064 float *c=NULL, *n=NULL, *v=NULL;
00065 if (colors_d == NULL) {
00066 ptr->pervertexcolors=0;
00067 ptr->getpointers(n, v);
00068 } else {
00069 ptr->pervertexcolors=1;
00070 ptr->getpointers(c, n, v);
00071 cudaMemcpy(c, colors_d, ptr->numverts * 3 * sizeof(float), cudaMemcpyDeviceToHost);
00072 }
00073
00074 cudaMemcpy(n, normals_d, ptr->numverts * 3 * sizeof(float), cudaMemcpyDeviceToHost);
00075 cudaMemcpy(v, vertices_d, ptr->numverts * 3 * sizeof(float), cudaMemcpyDeviceToHost);
00076 }
00077
00078
00079