小编Mak*_*gan的帖子

在 GLSL 中优化光线追踪着色器

我编写了一个基于体素化的光线追踪器,它按预期工作,但速度非常慢。

目前光线追踪器代码如下:

#version 430 
//normalized positon from (-1, -1) to (1, 1)
in vec2 f_coord;

out vec4 fragment_color;

struct Voxel
{
    vec4 position;
    vec4 normal;
    vec4 color;
};

struct Node
{
    //children of the current node
    int children[8];
};

layout(std430, binding = 0) buffer voxel_buffer
{
    //last layer of the tree, the leafs
    Voxel voxels[];
};
layout(std430, binding = 1) buffer buffer_index
{
    uint index;
};
layout(std430, binding = 2) buffer tree_buffer
{
    //tree structure       
    Node tree[];
};
layout(std430, binding …
Run Code Online (Sandbox Code Playgroud)

c++ opengl optimization gpu glsl

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

为什么在使用gcc编译后值会消失?

我正在为树莓派做一些简单的编程,我遇到了一个奇怪的问题.

我需要值0x80000000来测试特定位.基本上,这个值对于我正在进行的硬件操作至关重要,无法替换.但是,当我生成汇编代码时,(状态&0x80000000)的关键操作似乎被删除了.也就是说,汇编代码上的任何地方都没有"和"操作.但是,如果我改变那个数字来说,0x40000000.和操作出现在我预期的位置.为什么这个数字具体消失了?

这是我的C代码:

#include <stdint.h>

#define REGISTERS_BASE 0x3F000000
#define MAIL_BASE 0xB880  // Base address for the mailbox registers
// This bit is set in the status register if there is no space to write into the mailbox
#define MAIL_FULL 0x80000000
// This bit is set in the status register if there is nothing to read from the mailbox
#define MAIL_EMPTY 0x40000000

struct Message
{
  uint32_t messageSize;
  uint32_t requestCode;
  uint32_t tagID;
  uint32_t bufferSize;
  uint32_t requestSize;
  uint32_t pinNum;
  uint32_t on_off_switch;
  uint32_t end; …
Run Code Online (Sandbox Code Playgroud)

c assembly gcc arm raspberry-pi

4
推荐指数
1
解决办法
120
查看次数

VScode API 为什么我无法获取当前行?

我正在使用打字稿编写 vs 代码扩展,但由于某种原因我无法获得当前行。

我试图做的功能是:

function makeFrame()
{
    vscode.window.activeTextEditor.selection.active.line;
}
Run Code Online (Sandbox Code Playgroud)

失败并出现错误:对象可能未定义导入语句是:

import {window, commands, Disposable, ExtensionContext, StatusBarAlignment, StatusBarItem, TextDocument} from 'vscode';
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

(我既是 TypeScript 的新手又是为 VS 代码编写扩展)

text-editor typescript visual-studio-code vscode-extensions

4
推荐指数
1
解决办法
2272
查看次数

运行python脚本并更改git分支

我正在努力想方设法在编程时更好地利用我的时间.

我有一个python脚本,可以完成一些繁重的工作(可能需要几个小时).现在,它所做的大部分工作都与网络有关,所以我有足够的cpu资源.

如果脚本是一个C二进制可执行文件,将gout checkout放到另一个分支上并做额外的工作就可以了,我甚至可以修改磁盘中的二进制文件,因为它已被复制到ram,所以直到它完成运行我不会影响程序输出.

但python脚本是翻译的,而不是编译的.如果我开始篡改源文件会发生什么,我可以破坏程序输出,还是将文本文件和相关的导入文件复制到RAM中,这样我就可以篡改源代码而不会有改变正在运行的程序行为的风险?

python git branch git-branch

4
推荐指数
2
解决办法
673
查看次数

在python中有效地将颜色转换为透明度

GIMP 有一个方便的功能,允许您将任意颜色转换为 Alpha 通道。

基本上所有像素都变得透明,这与它们与所选颜色的距离有关。

我想用 opencv 复制这个功能。

我尝试遍历图像:

    for x in range(rows):
        for y in range(cols):
            mask_img[y, x][3] = cv2.norm(img[y, x] - (255, 255, 255, 255))
Run Code Online (Sandbox Code Playgroud)

但这是非常昂贵的,执行该迭代所需的时间比简单地将字段设置为 0(6 分钟对 1 小时)所需的时间长约 10 倍

这似乎更像是一个 python 问题而不是一个算法问题。我在 C++ 中做过类似的事情,在性能方面并没有那么糟糕。

有没有人有关于实现这一目标的建议?

python opencv image image-processing computer-vision

4
推荐指数
1
解决办法
2017
查看次数

如何在不创建实例的情况下获取类的方法成员的类型?

假设我们有:

template <typename T>
void foo(std::vector<T> &t) {
    auto var = T();
    std::vector<decltype(var.Get())> array;
}
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,创建了一个数组。该数组的类型是Get()的返回值是什么。通过创建类型T的虚拟变量,然后使用decltype推断Get的返回类型,可以找到此值。

这是可行的,但是它需要创建一个无用的伪变量。

相反,我们可以这样做:

template <typename T>
void foo(std::vector<T> &t) {
    auto var = t[0];
    std::vector<decltype(var.Get())> array;
}
Run Code Online (Sandbox Code Playgroud)

不会创建任何虚拟变量,但是鉴于我们不能保证数组至少包含on元素,这可能会崩溃。

有没有一种方法可以推断.Get()的类型而不创建虚拟对象?

c++ arrays generics templates types

4
推荐指数
1
解决办法
73
查看次数

用打字机写编号方程?

Typst 的文档说有一个方程函数可以用来编写编号方程。

但是当我写时:

#equation($a$)

我收到一条错误消息,说找不到这样的符号。

math markup typesetting mathematical-typesetting typst

4
推荐指数
1
解决办法
1902
查看次数

如何使用syn插入文档注释?

我有这个小片段试图将注释附加到源文件中。


    let mut file: File = syn::parse_str(file_content.as_str()).expect("Failed to parse Rust code");

    for item in &mut file.items {
        // Use quote! to generate a comment and append it to the item
        let mut comment: Attribute = parse_quote! {
            /// This is a generated comment.
        };

        comment.style = AttrStyle::Outer;

        match item {
            Item::Struct(ref mut s) => {
                s.attrs.push(comment.clone());
            }
            Item::Enum(ref mut e) => {
                e.attrs.push(comment.clone());
            }
            Item::Fn(ref mut f) => {
                f.attrs.push(comment.clone());
            }
            _ => {}
        }
    }
Run Code Online (Sandbox Code Playgroud)

但这是结果:

#[doc = r" …
Run Code Online (Sandbox Code Playgroud)

documentation comments rust syn

4
推荐指数
1
解决办法
54
查看次数

你如何"释放"纹理单元?

为了使用纹理单元,我们通常将它或多或少地绑定到当前进程:

glUseProgram(program);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, textureID);

GLint loc = glGetUniformLocation(program, "uniform");
//error check

glUniform1i(loc,0);
Run Code Online (Sandbox Code Playgroud)

你如何"释放"纹理单元.换句话说,如何从当前程序中的纹理单元绑定点分离纹理?

c++ opengl textures

3
推荐指数
2
解决办法
165
查看次数

Git 子模块失败,无法访问子模块

操作系统:Linux

git 版本:2.26.2

我的仓库的 Git 仓库提供者:gitlab

失败子模块的回购提供者:Github

.gitmodules

[submodule "libraries/stb"]
    path = libraries/stb
    url = https://github.com/nothings/stb.git
    branch = master
[submodule "libraries/harfbuzz"]
    path = libraries/harfbuzz
    url = https://github.com/harfbuzz/harfbuzz.git
    branch = master
[submodule "libraries/shaderc"]
    path = libraries/shaderc
    url = https://github.com/google/shaderc.git
    branch = master
[submodule "libraries/freetype2"]
    path = libraries/freetype2
    url = https://github.com/aseprite/freetype2.git
    branch = master
[submodule "libraries/VulkanMemoryAllocator"]
    path = libraries/VulkanMemoryAllocator
    url = https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator.git
    branch = master
[submodule "libraries/googletest"]
    path = libraries/googletest
    url = https://github.com/google/googletest.git
    branch = master
[submodule "libraries/Eigen"]
    path = libraries/Eigen
    url …
Run Code Online (Sandbox Code Playgroud)

linux git github git-submodules gitlab

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