小编Jan*_*ese的帖子

英特尔和Nvidia之间的OpenGL fbo blitting不一致

我将OpenGL中的场景以低分辨率渲染到帧缓冲区中.然后我打算将这个版本绘制到整个屏幕上(用GL_NEAREST进行升级).我使用纹理blitting(glBlitFramebuffer)来做到这一点.在我的Nvidia GPU上,这可以工作,但是当我在Intel i7集成显卡上执行完全相同的代码时,目标帧缓冲区上的y位置似乎是错误的(即图像渲染得太远了).

glGetError没有返回错误.由于Nvidia的驱动程序往往非常宽容,我希望我错过了Nvidia不关心的OpenGL规范中的细节.我搜索了互联网和stackoverflow,无法找到描述的类似问题.两位司机都报告支持OpenGL 3.0

我的绘图代码:

//setup viewport for small image
glPushAttrib(GL_VIEWPORT_BIT);
glViewport(0, 0, image.getWidth(), image.getHeight());

//bind small framebuffer
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, fbo);
glDrawBuffers(GL_COLOR_ATTACHMENT0);
glClear(GL_COLOR_BUFFER_BIT);

//draw
renderRotatedFull(1);//nothing interesting at all happening here

//reset Viewport
glPopAttrib();

//prepare and execute blitting
glBindFramebuffer(GL_READ_FRAMEBUFFER, fbo);
glReadBuffer(GL_COLOR_ATTACHMENT0);

glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
glDrawBuffers(GL_BACK_LEFT);

glBlitFramebuffer(0, 0, image.getWidth(), image.getHeight(), 0, 0, Game.width,
    Game.height, GL_COLOR_BUFFER_BIT, GL_NEAREST);

glBindFramebuffer(GL_FRAMEBUFFER, 0);

//throws exception if there is an OpenGL error
org.lwjgl.opengl.Util.checkGLError();
Run Code Online (Sandbox Code Playgroud)

初始化完成如下:

fbo =glGenFramebuffers();
glBindFramebuffer(GL_FRAMEBUFFER, fbo);

rbo = glGenRenderbuffers();
glBindRenderbuffer(GL_RENDERBUFFER, rbo);
glRenderbufferStorage(GL_RENDERBUFFER, GL_RGBA8, image.getWidth(), image.getHeight());
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, …
Run Code Online (Sandbox Code Playgroud)

java opengl fbo lwjgl opengl-3

15
推荐指数
1
解决办法
889
查看次数

在 Electron 的预加载脚本中使用 typescript

我使用 Electron-forge 的 React-TypeScript 模板构建了一个 Electron 应用程序,这意味着它使用了 Electron-prebuilt-compile,根据我能找到的唯一文档,它应该可以工作。

正如所宣传的那样,index.html 包含可以正常工作的打字稿。但我还使用带有预加载脚本的webview 标签,以便显示外部网站并修改它们。这是我正在使用的代码:

<webview id="webview" preload="./preload.ts" webpreferences="contextIsolation, webSecurity=no" src="https://example.com"></webview>
Run Code Online (Sandbox Code Playgroud)

这个预加载脚本相当复杂,我很想使用打字稿。但它显然被解析为 javascript,任何类型注释都会导致语法错误。有什么技巧可以让打字稿发挥作用吗?如果我必须手动调用转译器,如何将其与 electro-forge 的构建过程集成?

tl;dr:预加载脚本被解析为 javascript,尽管 typescript 在其他地方“正常工作”,我也想在这里使用 typescript

typescript electron

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

特征对象和特征的直接实现者的特征实现

我有一个结构,主要封装了一个向量:

struct Group<S> {
    elements: Vec<S>
}
Run Code Online (Sandbox Code Playgroud)

我也有一个简单的特征,该特征也可用于其他结构:

trait Solid {
    fn intersect(&self, ray: f32) -> f32;
}
Run Code Online (Sandbox Code Playgroud)

我想实现SolidGroup,但我希望能够使用Group都为相同的实现的名单Solid和混合实现的名单Solid。基本上我想同时使用Group<Box<Solid>>Group<Sphere>Sphere实现Solid)。

目前我正在使用这样的东西:

impl Solid for Group<Box<Solid>> {
    fn intersect(&self, ray: f32) -> f32 {
        //do stuff
    }
}

impl<S: Solid> Solid for Group<S> {
    fn intersect(&self, ray: f32) -> f32 {
        //do the same stuff, code copy-pasted from previous impl
    }
}
Run Code Online (Sandbox Code Playgroud)

这是可行的,但是两次换行相同的代码不是惯用的解决方案。我一定缺少明显的东西吗?

就我而言,我测量了两个特征实现之间的显着性能差异,因此始终使用 …

traits rust

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

Java8无符号算术

据报道,Java 8具有对无符号整数的库支持.但是,似乎没有文章解释如何使用它以及可能的程度.

像Integer.CompareUnsigned这样的函数很容易找到并且似乎可以达到预期的效果.但是,我甚至没有编写一个简单的循环,它在无符号长整数范围内循环遍历2的所有幂.

int i = 0;
for(long l=1; (Long.compareUnsigned(l, Long.MAX_VALUE*2) < 0) && i<100; l+=l) {
    System.out.println(l);
    i++;
}
Run Code Online (Sandbox Code Playgroud)

产生输出

1
2
4
8
...
1152921504606846976
2305843009213693952
4611686018427387904
-9223372036854775808
0
0
0
...
0
Run Code Online (Sandbox Code Playgroud)

我是否遗漏了一些东西,或者这个简单的任务仍然需要外部库?

java java-8 integer-arithmetic

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

缺少"ASP.NET核心Web应用程序(.NET核心)"模板

我正在尝试开发ASP.NET Core应用程序.我尝试按照文档(例如本教程),但我找不到ASP.NET Core模板.应该包含它的对话框看起来像这样:新项目对话框.

我正在使用Microsoft Visual Studio Enterprise 2015版本14.0.25431.01更新3,并安装了Microsoft .NET Core 1.0.1 VS 2015工具预览2(我还修复并重新安装了它,但没有成功).

c# asp.net-mvc visual-studio visual-studio-2015

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