小编Cal*_*ius的帖子

如何判断OpenGL上下文是否是硬件加速的?

我知道如果openGl实现没有找到合适的驱动程序,它会愉快地退回并以软件模式呈现所有内容.这对于图形应用程序很有用,但它对于计算机游戏来说是不可接受的.

我知道许多用户使用的是Windows XP,如果用户没有为他的GPU安装显卡驱动程序,那么OpenGL将不会是硬件加速的(而DirectX是否会产生错误).

是否有更好的(可能是跨平台)方式来确定OpenGL是否使用硬件加速度而不是测量FPS,如果它太低则通知用户?

我知道像Quake3这样的游戏能以某种方式找到它......

opengl graphics hardware-acceleration

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

是否保证类型T [x] [y]与C中的T [x*y]具有相同的存储器布局?

到目前为止,我认为它是,但在我了解到编译器可能填充数据以使其符合架构要求时,例如我有疑问.所以我想知道一个char[4][3]内存布局是否相同char[12].编译器可以在char[3]部件之后放置填充以使其对齐,这样整个数组实际上需要16个字节吗?

背景故事,库的一个函数在char*参数中占用一堆固定长度的字符串,因此它需要一个没有paddig的连续缓冲区,字符串长度可以是奇数.所以我认为我声明了一个char[N_STRINGS][STRING_LENGTH]数组,然后方便地填充它并通过将其传递给函数传递给它char*.到目前为止似乎有效.但我不确定这个解决方案是否可移植.

c memory-alignment multidimensional-array language-lawyer

13
推荐指数
3
解决办法
614
查看次数

在所有现代浏览器中,javascript正则表达式中的花括号处理是否相同?

JavaScript正则表达式中的大括号用于表示量词.所以写作

a{2,4}
Run Code Online (Sandbox Code Playgroud)

将匹配aa,aaa和aaaa.但是如果你错误地输入这个量词,就像这样:

x{1,x}
Run Code Online (Sandbox Code Playgroud)

它将匹配文字文本"x {1,x}",至少在Firefox中.

这种行为在现代浏览器中是否常见?

ECMA标准禁止这种行为,并要求撤销支架.

(背景:我必须在工作中为javascript正则表达式编写一个解析器.)

javascript regex

11
推荐指数
1
解决办法
276
查看次数

使用gcov进行交叉配置,但忽略GCOV_PREFIX和GCOV_PREFIX_STRIP

我想使用GCOV进行代码覆盖,但测试将在另一台机器上运行.因此,可执行文件中.gcda文件的硬连线路径将无法正常工作.

为了改变这个默认目录我可以使用GCOV_PREFIX和GCOV_PREFIX_STRIP ENV瓦尔,因为它说这里.

这是我用过的命令:

$ export GCOV_PREFIX="/foo/bar"
$ export GCOV_PREFIX_STRIP="3"
$ gcc main.c -fprofile-arcs -ftest-coverage
$ strings a.out | grep gcda
/home/calmarius/blahblah/main.c.gcda
Run Code Online (Sandbox Code Playgroud)

路径保持不变.有人有这方面的经验吗?

c gcc gcov

10
推荐指数
2
解决办法
6918
查看次数

mono忽略app.config文件中的dllmaps

似乎Mono忽略了本地配置文件中的dllmaps.

我想在Linux(ubuntu)上移植我的.NET应用程序,它调用本机库,所以我有dllmaps来使我的代码工作.单声道文档说你必须为something.exe创建一个something.exe.config并将特定于应用程序的配置放入其中.它解析文件(因为如果我在其中犯了一些拼写错误就会抱怨)并且文件名是正确的但它似乎忽略了dllmaps.

配置文件很简单:

<configuration>
<dllmap dll="i:openal32.dll" target="libopenal.so" />
</configuration>
Run Code Online (Sandbox Code Playgroud)

Mono没有找到openal32.dll并抛出DllNotFoundException.但是如果我在主/ etc/mono/config文件中复制那个dllmap条目,那么一切都很好.如果做$ MONO_LOG_LEVEL = debug mono ...技巧看看它做了什么,我看到根本没有尝试加载libopenal.so.但许多人试图加载libopenal32.dll,./ libopenal32.dll libopenal32.so,openal32.so等文件.

可能我又遇到了一个Mono bug?

我想在存档中打包此配置文件,我不想让我的用户弄乱/ etc/mono/config文件.

有任何想法吗?

linux mono

8
推荐指数
1
解决办法
3759
查看次数

如何在javascript中更改框架中的窗口标题?

我在freehoster服务上托管了我的网络应用程序,该服务在框架集中显示我的网页.有2帧.在顶部狭窄的框架中有他们的广告,底部框架是我的.我可以在管理面板中设置标题,但无论我的标题标签是什么,它都始终保持不变.document.title在javascript中设置不起作用.但是如果我使用ff的This frame/show选项从frameset中突破它将按预期更改窗口/选项卡标题.

那么是否可以从我的框架更改父文档的标题?

(背景:它将是一个ajax棋盘游戏,我想在轮到他时以某种方式通知用户.)

html javascript

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

如何避免在开发过程中"交换死亡"?

可能每个人在开发过程中至少遇到过一次这个问题:

while(/*some condition here that somehow never will be false*/)
{
    ...
    yourvector.push_back(new SomeType());
    ...
}
Run Code Online (Sandbox Code Playgroud)

当您看到程序开始耗尽所有系统内存时,您的程序会挂起,并且您的系统开始像疯了一样交换.如果你不能足够快地识别问题并终止进程,你可能会在几秒钟内得到一个无响应的系统,你的鼠标指针甚至都没有移动.您可以使用"内存不足"错误(可能需要几分钟的时间)等待程序崩溃,或者在计算机上点击重置.

如果您无法立即追踪该错误,那么您将需要多次测试和重置以找出哪个非常烦人...

我正在寻找一种可能的跨平台方式来防止这种情况.最好的是调试模式代码,如果它分配了太多内存,它会退出程序,但是如何跟踪分配的内存量呢?覆盖全局new和delete操作符无济于事,因为我在delete中调用的free函数不会知道释放了多少字节.

任何想法都赞赏.

c++ debugging memory-leaks memory-management

8
推荐指数
2
解决办法
1436
查看次数

在使用浮点运算的多人RTS游戏中保持同步

我正在用C#编写2D空间RTS游戏.单人运动.现在我想添加一些多人游戏功能.我用谷歌搜索它似乎只有一种方法可以让数千个单元在没有强大的网络连接的情况下连续移动:在每个玩家运行相同的模拟时,只通过网络发送命令.

现在整个发动机到处使用双打都存在问题.浮点计算在很大程度上取决于编译器优化和cpu体系结构,因此很难保持同步.它根本不是基于网格的,并且有一个简单的phisics引擎来移动太空船(太空船有冲动和角动量......).因此重新编码整个东西以使用固定点将是非常麻烦的(但可能是唯一的解决方案).

所以到目前为止我有两个选择:

  • 再说一遍当前代码并使用整数从头开始重新启动
  • 只有在有足够带宽的情况下才能让游戏局域网拥有8个拥有数千个单位的玩家并在(几乎)每一帧中发送位置和方向等...

所以我寻找更好的意见,(甚至是将代码迁移到定点而不会搞砸一切的提示......)

c# floating-point network-programming multiplayer

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

为什么oop语言没有'只读'访问修饰符?

每次我写琐碎的getter(获取只返回成员值的函数)我想知道为什么oop语言不会只是一个'只读'访问修饰符,它允许读取对象成员的值而不是允许你像c ++中的const一样设置它们.

私有,受保护的公共访问修饰符为您提供完整(读/写)访问或无访问权限.

编写一个getter并每次调用它都很慢,因为函数调用比访问一个成员要慢.一个好的优化器可以优化这些getter调用,但这是"神奇的".我认为学习某个编译器的优化器如何工作并编写代码来利用它并不是一个好主意.

那么为什么我们需要编写访问器,只读一个新的访问修饰符才能实现的实际操作?

ps1:请不要说'它会破坏封装'之类的东西.公众foo.getX()和公众但只读foo.x也会做同样的事情.

编辑:我没有明确表达我的帖子.抱歉.我的意思是你可以在外面阅读会员的价值,但你无法设定它.您只能在类范围内设置其值.

oop programming-languages

7
推荐指数
3
解决办法
555
查看次数

即使使用-g选项,GCC也不会生成行号信息

我从源代码构建并安装了GCC 4.8.1:

$ gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/x86_64-unknown-linux-gnu/4.8.1/lto-wrapper
Target: x86_64-unknown-linux-gnu
Configured with: ./configure --disable-multilib
Thread model: posix
gcc version 4.8.1 (GCC) 
Run Code Online (Sandbox Code Playgroud)

我写了一个简单无用的程序:

$ cat hw.c
#include <stdio.h>

void foo()
{
    int a;
    scanf("%d", &a); /* So I can press ctrl+c here. */
    printf("Hello world!\n");
}

int main()
{
    foo();   
}
Run Code Online (Sandbox Code Playgroud)

现在我编译这个:

$ gcc -g -O0 hw.c -o hw
Run Code Online (Sandbox Code Playgroud)

然后开始用GDB调试它:

$ gdb hw
GNU gdb (Ubuntu/Linaro 7.4-2012.04-0ubuntu2.1) 7.4-2012.04
Copyright (C) 2012 Free Software Foundation, Inc.
License GPLv3+: GNU GPL …
Run Code Online (Sandbox Code Playgroud)

c gcc gdb gcc4.8

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