Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Webgl 在Haxe中使用texSubImage2D渲染图像_Webgl_Haxe - Fatal编程技术网

Webgl 在Haxe中使用texSubImage2D渲染图像

Webgl 在Haxe中使用texSubImage2D渲染图像,webgl,haxe,Webgl,Haxe,我正在学习如何使用Haxe将图像印在画布上,我已经了解到texSubImage2D应该是我完成这项工作所需要的功能 我阅读了一些找到的文档,认为我可以通过完成以下参数来实现我所追求的目标: void gl.texSubImage2D(target, level, xoffset, yoffset, format, type, HTMLImageElement? pixels); 这就是我所做的: gl.texSubImage2D (cast fluid.dyeRenderTarget.wr

我正在学习如何使用Haxe将图像印在画布上,我已经了解到
texSubImage2D
应该是我完成这项工作所需要的功能

我阅读了一些找到的文档,认为我可以通过完成以下参数来实现我所追求的目标:

void gl.texSubImage2D(target, level, xoffset, yoffset, format, type, HTMLImageElement? pixels);  
这就是我所做的:

gl.texSubImage2D (cast fluid.dyeRenderTarget.writeToTexture, 0, Math.round(mouse.x), Math.round(mouse.y), gl.RGB, gl.UNSIGNED_BYTE, document.querySelector('img[src="images/myImage.jpg"]'));
但是,当我尝试构建项目时,我会遇到以下错误:

src/Main.hx:571: characters 135-191 : js.html.Element should be Int
src/Main.hx:571: characters 135-191 : For function argument 'format'
当我回到文档时,我传递的格式
gl.RGB
是一个可接受的参数,因此我不确定哪里出了问题


任何指导都将不胜感激

我不能完全重现您收到的错误消息,我认为在最近的Haxe版本中,错误可能会有所改善。无论如何,这里有几个问题:

  • 首先,通过执行
    gl.RGB
    /
    gl.UNSIGNED_BYTE
    ,您试图从实例访问静态字段。实际上,我得到了一个有用的错误:

    无法从类实例访问静态字段RGB

    虽然其他语言允许这样做,但您必须通过类名访问它们。要解决这个问题,只需在
    js.html.webgl.RenderingContext
    前面加上前缀

  • 其次,
    querySelector()
    返回一个简单的
    js.html.Element
    ,它接受。他们都想要更具体的东西:
    VideoElement
    ImageElement
    canvaseelement
    。所以你必须先投下它:

    var image:js.html.ImageElement = cast document.querySelector('img[src="images/myImage.jpg"]');
    
  • 最后,您是否需要强制转换第一个参数似乎有点可疑。即使它有效,也可能有一种更好的方法来使用您正在使用的包装器

因此,总而言之,应编制以下文件:

gl.texSubImage2D(cast fluid.dyeRenderTarget.writeToTexture, 0,
    Math.round(mouse.x), Math.round(mouse.y),
    RenderingContext.RGB, RenderingContext.UNSIGNED_BYTE, image);

您使用的是哪个Haxe版本?@Gama11 3.2.1,这仅仅是因为我分叉的项目在使用较新版本时产生错误……我明白了。。在我写答案之前还有一个问题,您需要强制转换它的
fluid.dyrenderTarget.writeToTexture
的类型是什么?@Gama11查看文件writeToTexture时声明为so
public var writeToTexture(默认值,null):GLTexture
writeToTexture是一个围绕常规webgl handleThanks的包装器,它提供了详细的答案,一切都是有意义的,但是,我仍然得到两个错误
src/Main.hx:574:characters 162-167:js.html.ImageElement应该是Int
src/Main.hx:574:characters 162-167:对于函数参数“format”
我将不得不进一步研究,因为显然有太多了!找出原因-我正在使用snow库,但该方法不存在!为了解决这个问题,我只需将方法名更改为
gl.current_context.texSubImage2D()