gpt4 book ai didi

java - Raycaster 不支持 OpenCL

转载 作者:行者123 更新时间:2023-12-01 15:48:21 26 4
gpt4 key购买 nike

目前我正在尝试使用 OpenCL 和 Java (LWJGL) 编写一个光线转换引擎。

但是在运行内核时,我无法 printf 或写入调试变量。我感觉内核突然被切断,而且因为报告的时间(opencl 之外)显示出非常快的结果(60fps),比 mandelbrot 示例中的速度更快!

我正在考虑 gDEBugger,但是我认为它不会支持 Java。

也非常欢迎对我的代码构成提出任何评论,因为我是初学者。也欢迎对我的光线转换数学发表评论。

#ifdef USE_TEXTURE
#define OUTPUT_TYPE __write_only image2d_t
#else
#define OUTPUT_TYPE global uint *
#endif

#define MAX_RAY_LENGTH 1024


bool isSolid(int x, int y, int z, global uchar *objectIsSolidStorage, int width, int height, int depth) {
uint placex = x / 8;
uint placey = y / 8;
uint placez = z / 8;

uint widthbychar = (width/8);
uint heightbychar = (height/8);
int calcbychar = placex + placey * widthbychar + placez * widthbychar * heightbychar;

int leftover = x % 8;
uchar solidchar = objectIsSolidStorage[calcbychar];

if (x > width || y > height || z >> depth ||
x < 0 || y < 0 || z < 0) return 1;

if ((solidchar & ( 1 << leftover )) >> leftover) {
return 1;
}
return 0;
}

int getColor(int x, int y, int z)
{
return 0xFFFFFFFF;
}

kernel void raycast(
const int width,
const int height,
const float positionX,
const float positionY,
const float positionZ,
const float directionX,
const float directionY,
const float directionZ,
OUTPUT_TYPE output,
global uchar *objectIsSolidStorage,
const int objectStorageWidth,
const int objectStorageHeight,
const int objectStorageDepth,
global uint *objectColorStorage,
global uint *smallObjectsMap,
global uint *hangableObjectsMap,
global uint *largeObjectsMap,
const int objectMapWidth,
const int objectMapHeight,
const float frustrumAngleX,
const float frustrumAngleY,
global char debug
) {

unsigned int rayx = get_global_id(0);
unsigned int rayy = get_global_id(1);

bool hit = false;
int itr = 0;
float x = positionX;
float y = positionY;
float z = positionZ;

printf("work");
int addX = (rayx - width / 2) * frustrumAngleX;
int addY = (rayy - height / 2) * frustrumAngleY;
int color = 0xFFAAFF;
while(!hit) {
x += addX;
y += addY;
z += itr;
if (MAX_RAY_LENGTH < itr) {
hit = true;
color = 0xFFFFFFFF;
break;
} else if (isSolid(x,y,z,objectIsSolidStorage,objectStorageWidth,objectStorageHeight,objectStorageDepth)) {
hit = true;
color = 0xAAAAAAAA;
break;
}
itr++;
}

#ifdef USE_TEXTURE
float4 oc = (float4)(
(c & 0xFF) >> 0,
(c & 0xFF00) >> 8,
(c & 0xFF0000) >> 16,
255.0f
);
write_imagef(output, (int2)(rayx, rayy), color / 255.0f);
#else
output[rayy * width + rayx] = color;
#endif
}

最佳答案

它应该适用于您的 OpenCL+java 开发:轻松附加到 java 进程并调试 OpenCL 内核

http://suhorukov.blogspot.com/2011/12/opencl-kernel-debugging-for-java-host.html

关于java - Raycaster 不支持 OpenCL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6658396/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com