小编syn*_*zer的帖子

Mac Mojave + opengl

Mac OS 10.14 Mojave刚刚发布,自6月以来,我们已经知道OpenGL将在操作系统中被弃用."OpenGL应用程序将继续运行,但你应该切换到Metal,"来解释一下.但是,似乎没有任何文档表明您是否仍然可以使用OpenGL进行编译,或者Apple 是否可以阻止或省略正确的开发库.我目前正在开发一个基于OpenGL的图形程序,如果编译将不再起作用,则无法冒险更新.有没有人测试过这个?

编辑:有没有其他人分享Esenthel的经验?

opengl macos deprecated macos-mojave

13
推荐指数
2
解决办法
1万
查看次数

没有 Emscripten,如何用标准库将 C++ 编译成 WebAssembly

我在构建独立的 webassembly 时遇到了问题,我想要完全控制内存和布局。我不想使用 emscripten 因为,正如下面的帖子所说,它没有给我我想要的所有编译时选项(例如堆栈大小控制,能够选择在独立模式下导入内存等。 ) 我一直在关注以下页面:如何使用 emscripten 生成独立的 webassembly 此外,emscripten 是矫枉过正。

到目前为止我所做的:我有一个通过自制软件下载的完全可用的 llvm 9 工具链(我在 macos 10.14 上。)我正在关注https://aransentin.github.io/cwasm/https:// depth-first.com/articles/2019/10/16/compiling-c-to-webassembly-and-running-it-without-emscripten/ 我使用 wasi 来获取 C 标准库。使用链接器标志,就像-Wl,-z,stack-size=$[1024 * 1024]我可以控制堆栈大小一样。编译成功。伟大的!

但是,我需要使用 C++ 标准库来支持我自己的一些和其他第三方库。据我所知,似乎没有任何简单的方法可以获得 libc++ 和 libc++abi。

我尝试了一个“hack”,我下载了 Emscripten 并让它构建了自己的 libc++ 和 libc++abi 文件。然后我尝试将这些文件和标题复制到正确的位置。然后我收到了关于缺少线程 API 的错误消息,这显然是由于没有使用 EMSCRIPTEN 编译造成的。所以我定义了EMSCRIPTEN宏并且这样工作。然后我想也许我可以删除 wasi 依赖项并使用 emscripten 的 libc 版本来保持一致,但随后也存在冲突/缺少标头。

简而言之,我想我已经接近我需要去的地方了,但事情变得非常混乱。我怀疑我采用了最简单的非脚本方法。

有没有人成功地为独立的 webassembly 创建了一个构建系统,让您可以使用 c 和 c++ 标准库?

编辑:

这是我现在拥有的超级 hacky 构建脚本(它是我在网上找到的东西的大量修改版本):

DEPS = 
OBJ = library.o
STDLIBC_OBJ = $(patsubst %.cpp,%.o,$(wildcard stdlibc/*.cpp)) …
Run Code Online (Sandbox Code Playgroud)

c++ compilation llvm-clang webassembly

10
推荐指数
1
解决办法
1955
查看次数

多个 Wasm 模块是否可以相互交互并直接通过函数共享内存?

有没有一种方法来实例2个WASM模块,a并且b这样a甚至可以从功能b,也从访问不同的记忆b?例如,让我们说,a通过调用的实现变得内存mallocb暴露于a。这样,所有有用的内存都来自b. 如果是这样,怎么做?更具体地说,这是否可以在没有额外开销的情况下完成,并且不需要在这些操作之间与 JavaScript 交互(实例化模块和设置导入/导出时的初始化步骤除外)?这种间接和内存访问的性能特征是什么,或者根本没有问题?在这种情况下,我进行微优化。

(我已经阅读了几篇文档,但我找不到明确的答案。我认为在 Wasm 的未来版本中,有标准化动态链接的计划会有所帮助,但我们还没有。)

memory dynamic-linking shared-memory webassembly

6
推荐指数
1
解决办法
1611
查看次数

在Python中,为什么单独的字典字符串值通过"in"相等检查?(字符串实习)

我正在构建一个Python实用程序,它将涉及将整数映射到字符串,其中许多整数可能映射到相同的字符串.根据我的理解,默认情况下Python实习短字符串和大多数硬编码字符串,因此通过在表中保留字符串的"规范"版本来节省内存开销.我认为我可以通过实习字符串值从中受益,即使字符串实习更多地用于密钥散列优化.我写了一个快速测试,它检查长字符串的字符串相等性,首先只存储列表中的字符串,然后将字符串存储在字典中作为值.这种行为对我来说意外:

import sys

top = 10000

non1 = []
non2 = []
for i in range(top):
    s1 = '{:010d}'.format(i)
    s2 = '{:010d}'.format(i)
    non1.append(s1)
    non2.append(s2)

same = True
for i in range(top):
    same = same and (non1[i] is non2[i])
print("non: ", same) # prints False
del non1[:]
del non2[:]


with1 = []
with2 = []
for i in range(top):
    s1 = sys.intern('{:010d}'.format(i))
    s2 = sys.intern('{:010d}'.format(i))
    with1.append(s1)
    with2.append(s2)

same = True
for i in range(top):
    same = same and (with1[i] is with2[i]) …
Run Code Online (Sandbox Code Playgroud)

python string dictionary string-interning python-3.x

5
推荐指数
1
解决办法
141
查看次数

JS 模块 vs 脚本加载顺序,Safari 中的全局变量

我一直在 Chrome 和 Firefox 中开发程序,但我注意到在 Safari 中加载时,我会在控制台中收到错误消息,表明某些变量不可用。我的 index.html 中有几个模块脚本标签,而其余的是常规脚本标签。

我的第一个问题是模块和脚本是否以未定义的顺序加载,这可能会导致部分问题。

我注意到的第二件事:在我的代码中,我在常规脚本中使用了老式样式模式:

const NAMESPACE = (function() { const out = {}; ... return out; }());
Run Code Online (Sandbox Code Playgroud)

在 Chrome 和 Firefox 中,这很好,但在 Safari 中看起来我需要这样做:

window.NAMESPACE = (function() { const out = {}; ... return out; }());
Run Code Online (Sandbox Code Playgroud)

或者控制台在其他文件中报告错误,指出该变量未在其他文件中声明。甚至对于全局作用域函数和类也是如此!

我的第二个问题是:为什么会这样?有没有办法解决这个问题?错误是否只会因为我试图从模块访问变量而发生,并且如果您从模块加载,Safari 的 JavaScript 引擎不会将全局对象暴露给全局范围?不知何故,我对此表示怀疑,因为即使两个非模块脚本尝试访问全局范围对象,问题仍然存在。

解决问题的最简单方法是什么?某些第三方脚本不能是模块。如果问题的一部分是加载顺序,我如何确保在另一个脚本可用之前不会加载脚本?我的想法是使用动态导入。

javascript safari module global-variables

5
推荐指数
0
解决办法
310
查看次数

xcrun 中缺少 iphone sdk 如何从命令行为 iphone 构建?

我正在尝试弄清楚如何使用 xcrun 为 iphone 操作系统构建金属着色器。我在 macos 1.4 Mojave 上安装了(几乎最新的)Xcode 11.3.1。

xcrun --sdk iphoneos --show-sdk-path 报告找不到sdk。

我检查了 xcrun --sdk macosx --show-sdk-path,报告 /Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk

iphone和TVOS sdks似乎根本不存在。不过,我可以使用 Xcode IDE 构建 iPhone。我检查了构建日志,发现有一步将 SDKROOT 设置为: SDKROOT=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS13.2.sdk,它位于 Xcode 包内。

我希望能够从命令行构建,但显然尚未注册正确的路径。我是否需要重新安装命令行工具,或者是否需要进行一些设置来将 SDK 添加到 xcrun?

我该如何继续?

xcode command-line ios xcrun metal

5
推荐指数
1
解决办法
1924
查看次数

openGL 透明像素意外变白

我注意到我的 openGL 纹理渲染有一个大问题:

假设透明像素被渲染为纯白色。根据 StackOverflow 上讨论的类似问题的大多数解决方案,我需要设置 glBlend / 正确的函数,但我已经设置了必要的 gl 状态,并且据我所知,纹理已正确加载。我的纹理加载函数如下:

GLboolean GL_texture_load(Texture* texture_id, const char* const path, const GLboolean alpha, const GLint param_edge_x, const GLint param_edge_y)
{
    // load image
    SDL_Surface* img = nullptr; 
    if (!(img = IMG_Load(path))) {
        fprintf(stderr, "SDL_image could not be loaded %s, SDL_image Error: %s\n", 
               path, IMG_GetError());
        return GL_FALSE;
    }


    glBindTexture(GL_TEXTURE_2D, *texture_id);
    // image assignment
    GLuint format = (alpha) ? GL_RGBA : GL_RGB;
    glTexImage2D(GL_TEXTURE_2D, 0, format, img->w, img->h, 0, format, GL_UNSIGNED_BYTE, img->pixels);

    // wrapping behavior …
Run Code Online (Sandbox Code Playgroud)

c++ opengl photoshop sdl alpha-transparency

3
推荐指数
1
解决办法
2522
查看次数

Codemirror Clike 模式似乎不起作用

我试图在我的项目中使用 CodeMirror 和 clike 模式来处理顶点和片段片段,但由于某种原因,语法突出显示对除数字和字符串文字之外的任何内容都不起作用。javascript 语法荧光笔工作正常。

我加载所有相关文件:

  <link   rel="stylesheet" href="js/third-party/codemirror/lib/codemirror.css">
  <script src='js/third-party/codemirror/lib/codemirror.js'></script>
  <script src='js/third-party/codemirror/mode/clike/clike.js'></script>
Run Code Online (Sandbox Code Playgroud)

我在index.html中创建一个文本区域:

  <textarea id = "WEEE"></textarea>
Run Code Online (Sandbox Code Playgroud)

然后我初始化一个编辑器:

    <script>
  const myTextarea = document.getElementById("WEEE");
  var editor = CodeMirror.fromTextArea(myTextarea, {
    lineNumbers: true,
    mode:   "clike"
  });
</script>
Run Code Online (Sandbox Code Playgroud)

结果是没有语法突出显示。在线示例显然仍然有效。CodeMirror.modes 返回模式列表,并且 clike 似乎已完全加载。我缺少什么?

html javascript codemirror

3
推荐指数
1
解决办法
1109
查看次数

glsl 非 mipmap 纹理不显示

我已经使用自己的迷你管道(使用 mipmap)成功地在几何体上显示纹理,但我决定不使用 mip-map,因为我的软件实际上不需要对细节级别进行任何更改。它是 2d 的并且使用像素艺术。细节不应该改变。我要补充一点,我正在尝试在纹理图集中循环纹理,并且禁用 mip 映射可能会有助于避免问题。

但是,不调用glGenerateMipmap会产生空白屏幕。调用它会产生正确的纹理。

是否还有另一个我必须调用的函数?

以下是我的纹理生成函数(我传递一个指向已创建的纹理 id 的指针。)

GLboolean GL_texture_load(Texture* texture_id, const char* const path, const GLboolean alpha, const GLint param_edge)
{
    // load image
    SDL_Surface* img = nullptr; 
    if (!(img = IMG_Load(path))) {
        fprintf(stderr, "SDL_image could not be loaded %s, SDL_image Error: %s\n", 
               path, IMG_GetError());
        return GL_FALSE;
    }


    glBindTexture(GL_TEXTURE_2D, *texture_id);
    // image assignment
    GLuint format = (alpha) ? GL_RGBA : GL_RGB;
    glTexImage2D(GL_TEXTURE_2D, 0, format, img->w, img->h, 0, format, GL_UNSIGNED_BYTE, img->pixels);
    glGenerateMipmap(GL_TEXTURE_2D); …
Run Code Online (Sandbox Code Playgroud)

opengl textures glsl mipmaps opengl-3

0
推荐指数
1
解决办法
612
查看次数