Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.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
Reactjs 具有外部图像纹理输入的gl react expo着色器_Reactjs_React Native_Opengl_Shader_Expo - Fatal编程技术网

Reactjs 具有外部图像纹理输入的gl react expo着色器

Reactjs 具有外部图像纹理输入的gl react expo着色器,reactjs,react-native,opengl,shader,expo,Reactjs,React Native,Opengl,Shader,Expo,我正在尝试使用gl react expo着色器对世博会项目中的某些图像应用一些效果。图像来自外部url(如) 我可以制作不使用纹理输入的简单着色器,而且效果非常好。但是我没有找到将图像传递给着色器的正确方法。我试图从这个站点()实现DiamondCrop示例,以及我发现的所有其他将图像传递到着色器的简单示例。但它们都不起作用 这是我的着色器定义: import React from "react"; import { Shaders, Node, GLSL } from "gl-react";

我正在尝试使用gl react expo着色器对世博会项目中的某些图像应用一些效果。图像来自外部url(如)

我可以制作不使用纹理输入的简单着色器,而且效果非常好。但是我没有找到将图像传递给着色器的正确方法。我试图从这个站点()实现DiamondCrop示例,以及我发现的所有其他将图像传递到着色器的简单示例。但它们都不起作用

这是我的着色器定义:

import React from "react";
import { Shaders, Node, GLSL } from "gl-react";

const frags = {
    diamond: GLSL`
    precision highp float;
    varying vec2 uv;
    uniform sampler2D t;
    void main () {
      gl_FragColor = mix(
        texture2D(t, uv),
        vec4(0.0),
        step(0.5, abs(uv.x - 0.5) + abs(uv.y - 0.5))
      );
    }`
}



const shaders = Shaders.create({
  DiamondCrop: {
    frag: frags.image
  }
});

const DiamondCrop = ({ children: t }) => (
  <Node
    shader={shaders.DiamondCrop}
    // uniformsOptions={{
    //     t: { interpolation: "nearest" },
    //   }}
    uniforms={ { t } }
  >
  </Node>
);

export { DiamondCrop }

有人能为我指出完成这项任务的正确方向吗?

这个问题很老了,但我想为那些可能对react native和Expo的gl相关内容感兴趣的人写一个答案

TL;DR发生这种情况的原因是因为库gl react expo已经过时,它正在从expo SDK的V33中弃用的“expo”导入expo

我制作了一个github repo,它承载了正确的库,您可能会想使用它。这里还有一个链接,如果您想保留原始库,请转到node_modules文件夹,转到gl react expo fodler并在文件中查找_expo2变量,然后将_expo2.default更改为_expo。它会成功的


干杯:)

我也面临同样的问题。我用的是你的#1,我想它应该是正确的。还没找到解决办法。嗨!谢谢你的回答!我一有时间就会试试你的解决方案,然后我会让你知道它是如何工作的。
// 1

<Surface style={{width: 200, height: 200}}>
    <DiamondCrop>
        {{uri:'http://i.imgur.com/rkiglmm.jpg'}}
    </DiamondCrop>
</Surface>


// 2

<Surface style={{width: 200, height: 200}}>
    <DiamondCrop>
        {{image:{uri:'http://i.imgur.com/rkiglmm.jpg'}}}
    </DiamondCrop>
</Surface>


// 3

<Surface style={{width: 200, height: 200}}>
    <DiamondCrop>
        http://i.imgur.com/rkiglmm.jpg
    </DiamondCrop>
</Surface>


// 4

<Surface style={{width: 200, height: 200}}>
    <DiamondCrop>
        {'http://i.imgur.com/rkiglmm.jpg'}
    </DiamondCrop>
</Surface>
// 1 (on 'expo red screen of death')

undefined is not an object (evaluating '_expo2.default.FileSystem')


// 2 (Expo warning; nothing appears on the Surface region)

Node#1(DiamondCrop#2), uniform t: no loader found for value, Object {
  "image": Object {
    "uri": "http://i.imgur.com/rkiglmm.jpg",
  },
}, Object {
  "image": Object {
    "uri": "http://i.imgur.com/rkiglmm.jpg",
  },
}


// 3 (Expo warning; nothing appears on the Surface region)

Node#1(DiamondCrop#2), uniform t: no loader found for value, http://i.imgur.com/rkiglmm.jpg, http://i.imgur.com/rkiglmm.jpg


// 4 (Expo warning; nothing appears on the Surface region)

Node#1(DiamondCrop#2), uniform t: no loader found for value, http://i.imgur.com/rkiglmm.jpg, http://i.imgur.com/rkiglmm.jpg