我使用Visual C++ 2010,MASM作为我的x64-Assembler.
这是我的C++代码:
// include directive
#include "stdafx.h"
// functions
extern "C" int Asm();
extern "C" int (convention) sum(int x, int y) { return x + y; }
// main function
int main()
{
// print asm
printf("Asm returned %d.\n", Asm());
// get char, return
_getch();
return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)
我的汇编代码:
; external functions
extern sum : proc
; code segment
.code
Asm proc
; create shadow space
sub rsp, 20o
; setup parameters
mov ecx, 10
mov edx, 15 …
Run Code Online (Sandbox Code Playgroud) 我听说过x86比较指令:cmp x, y
进行减法并根据结果设置各种标志.
现在,如果我只想测试两个操作数是否相等怎么办?不能做XOR而不是减法要快得多吗?我的问题是,是否有一个指令与XOR进行比较,以判断两个操作数是否相等?也许它看起来像这样:cmpeq x, y
或者cmpxor x, y
.
我猜想如果我只是想测试相等性,使用a cmpxor
会比cmp
减去更快.有这样的指示cmpxor
会给我一个加速吗?
我也想说,我知道xor
会设置zero flag
.但如果我这样做xor x, y
,它就会改变x
.我不希望这样.我想要一个比较指令,只留下两个操作数.
我想让我的窗口小部件填充父窗口,即使窗口调整大小,所以我读到这个:如何使窗口大小的Qt窗口小部件增长?
但是这个解决方案产生了一个新问题:我的窗口小部件自动重新调整大小到窗口的大小,但窗口的两侧有填充.我希望小部件完全填充父级,而不是这样做.看:
在这里,您可以看到选项卡小部件并不完全填充父级.我已经做了一些研究,并且已经看到通过编程,你可以配置布局来摆脱这个填充.问题是,我正在QDesigner中构建我的GUI ,所以我不能去layout->setMargin(0);
我的问题是,如何通过Qt Designer摆脱窗口两侧的填充?
我正在阅读关于完美转发的内容,这是我所学到的让我困惑的事情:
当你试图实现完美的转发时,你会做这样的事情:
template<class T> // If I were to call foo with an l-value int, foo would look
void foo(T &&x); // like this: void foo(int& &&x)
Run Code Online (Sandbox Code Playgroud)
那么我想,等等,这是否意味着如果我这样做:
template<class T> // If I were to call foo with an l-value int, foo would look
void foo(T x); // like this: void foo(int& x);
Run Code Online (Sandbox Code Playgroud)
但事实并非如此.foo看起来像这样:void foo(int x);
我的问题:为什么完美的转发功能,T变成T&或T &&,但在另一个,T不是参考?有人可以告诉我这个的确切规则吗?我需要一些澄清!
我14岁,已经学习了大约4/5个月的java.我正在编写一个现在叫做super mario winshine的游戏,我想知道一个主要是静态变量的类是否是一个好习惯.
该类是保存游戏关卡/世界的所有信息的类.由于我只需要这个类的一个版本,并且许多其他类将使用它,我选择将所有变量设置为静态.这是好习惯吗?
我已经考虑过这样一个事实:我可以保持变量"非静态"并且只是克隆我用于该类的主要对象,但我认为在这种情况下我宁愿为内存牺牲"OO".
我刚刚开始学习.NET,所以很有可能这是一个很大的错误:
我正在尝试制作一个简单的乒乓球游戏,使用一个表单,然后使用System :: Drawing :: Graphics类将游戏绘制到表单中.
我的代码的重要部分看起来像这样:
(主要游戏循环):
void updateGame()
{
//Update Game Elements
(Update Paddle And Ball) (Ex. paddle.x += paddleDirection;)
//Draw Game Elements
//Double Buffer Image, Get Graphics
Bitmap dbImage = new Bitmap(800, 600);
Graphics g = Graphics::FromImage(dbImage);
//Draw Background
g.FillRectangle(Brushes::White, 0, 0, 800, 600);
//Draw Paddle & Ball
g.FillRectangle(Brushes::Black, paddle);
g.FillRectangle(Brushes::Red, ball);
//Dispose Graphics
g.Dispose();
//Draw Double Buffer Image To Form
g = form.CreateGraphics();
g.DrawImage(dbImage, 0, 0);
g.Dispose();
//Sleep
Thread.sleep(15);
//Continue Or Exit
if(contineGame())
{
updateGame();
} …
Run Code Online (Sandbox Code Playgroud) 我正在尝试以正常填充模式渲染基元,然后作为线框.
渲染代码:
glClear(GL_COLOR_BUFFER_BIT);
glClearColor(0.9f, 0.9f, 0.9f, 1);
// reset matrix
glLoadIdentity();
// fill display list
glColor3c(150, 255, 255);
glCallList(lDList);
// wireframe display list
glColor3f(0, 0, 0);
glLineWidth(10);
glPolygonMode(GL_FRONT_AND_BACK, GL_LINES);
glCallList(lDList);
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
Run Code Online (Sandbox Code Playgroud)
显示列表创建代码:
lDList = glGenLists(1);
glNewList(lDList, GL_COMPILE);
glBegin(GL_QUADS);
glVertex3i(-1, -1, 0);
glVertex3i(1, -1, 0);
glVertex3i(1, -1, -25);
glVertex3i(-1, -1, -25);
glEnd();
glEndList();
Run Code Online (Sandbox Code Playgroud)
glColor3c宏:
#define glColor3c(r, g, b) glColor3f(r / 255, g / 255, b / 255)
Run Code Online (Sandbox Code Playgroud)
我希望得到一个青铜色的平面,周围有一个黑色的框架,但所有这一切都发生在我第二次渲染显示列表时,它只是填充和绘制整个事物,覆盖另一个图元的像素.我最终得到了我想要绘制的平面,但它只是黑色(我为"版本"行指定的颜色).
任何其他可能有用的信息都是我使用SDL,在Windows 7上使用MSVC++ 2010.我没有对glEnable 进行任何调用,因此我没有启用任何奇怪的设置会弄乱它,或者,也许解决问题.我唯一的OpenGL设置代码设置了投影和模型视图矩阵,然后创建了显示列表.
显然我的问题是为什么我第二次绘制显示列表是填充原语而不是创建行?我该如何解决?
我正在尝试创建一个简单的单元着色器效果,它涉及背面和正面剔除。但到目前为止,我的剔除结果相当奇怪。
设置OpenGL源代码:
// init matrices
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45, 800 / 600, 0.01f, 150);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
// enable opengl caps
glEnable(GL_NORMALIZE);
glEnable(GL_CULL_FACE);
// cell shading effects
glLineWidth(3.5f);
// setup display list
pDList = glGenLists(1);
glNewList(pDList, GL_COMPILE);
glBegin(GL_QUADS);
// front
glNormal3f(0, 0, 1);
glVertex3f(-0.25f, -0.5f, -3);
glVertex3f(0.25f, -0.5f, -3);
glVertex3f(0.25f, -1, -3);
glVertex3f(-0.25f, -1, -3);
// back
glNormal3f(0, 0, -1);
glVertex3f(-0.25f, -0.5f, -3.5f);
glVertex3f(0.25f, -0.5f, -3.5f);
glVertex3f(0.25f, -1, -3.5f);
glVertex3f(-0.25f, -1, -3.5f);
// top
glNormal3f(0, 1, 0);
glVertex3f(-0.25f, -0.5f, -3.5f);
glVertex3f(0.25f, -0.5f, …
Run Code Online (Sandbox Code Playgroud) 我有一个16*16的纹理,当我将它绘制到屏幕上时,它似乎是放大(我认为它称为MipMapping),但"平滑"纹理,而我只是希望像素增加大小.
这有点难以解释,所以我提出了一张你可以看到的照片:
img http://photoupload.org/images/94135450192227784004.png
正如你所看到的,它试图平滑它,我想要一个更大的图片,看起来像这样:
img2 http://photoupload.org/images/95943288748957761603.png
我该如何解决?是否与我使用Slick Util有关?
我已经在Google上寻找了一种可以在汇编源文件中包含机器代码的方法.我没有运气.
我所说的'内联机器代码'可能不清楚,所以让我给你一个我正在寻找的例子:
; here's my normal assembly code...
mov eax, 8
add eax, 10
; now I would like to be able to add some machine code
__machinecode__("40") ; this is equivalent to 'inc eax' (I think!)
Run Code Online (Sandbox Code Playgroud)
就是这样了.
我刚刚开始学习LWJGL(Java OpenGL),而且我的程序遇到了大量的延迟.
基本上,我正在尝试制作2.5D Minecraft克隆,所以我为世界代码所做的就是创建一个"Block"类的多维数组,我制作了150乘50.到目前为止,这是我世界级的代码:
这是我的渲染循环:
一些额外的信息,"Block"类的所有绘制方法都是绘制立方体的所有边,除了背面.
所以,正在发生的事情是它渲染了一大块立方体(我想要的是什么),除了FPS非常糟糕.
我不太确定我做错了什么.请记住,我需要一个多维数据集阵列,因为它将像Minecraft一样,我将必须能够轻松地组织块,并能够根据用户的行为来销毁/放置块.
谢谢!
编辑:块类的绘制方法:
Texture stone = Util.createTexture("Tiles/Stone.png");
stone.bind();
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glBegin(GL_QUADS);
//FRONT FACE
glTexCoord3f(0,1,z);
glVertex3f(x,y,z);
glTexCoord3f(1,1,z);
glVertex3f(x + width,y,z);
glTexCoord3f(1,0,z);
glVertex3f(x + width,y + height,z);
glTexCoord3f(0,0,z);
glVertex3f(x,y + height, z);
//RIGHT FACE
glTexCoord3f(0,1,z);
glVertex3f(x + width,y,z);
glTexCoord3f(1,1,z - length);
glVertex3f(x + width,y,z - length);
glTexCoord3f(1,0,z - length);
glVertex3f(x + width,y + height,z - length);
glTexCoord3f(0,0,z);
glVertex3f(x + width,y + height,z);
//LEFT FACE
glTexCoord3f(0,1,z);
glVertex3f(x,y,z);
glTexCoord3f(1,1,z - length);
glVertex3f(x,y,z - …
Run Code Online (Sandbox Code Playgroud) 我正在使用MASM和Visual C++,我正在使用x64进行编译.这是我的C++代码:
// include directive
#include "stdafx.h"
// external functions
extern "C" int Asm();
// main function
int main()
{
// call asm
Asm();
// get char, return success
_getch();
return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)
和我的汇编代码:
extern Sleep : proc
; code segment
.code
; assembly procedure
Asm proc
; sleep for 1 second
mov ecx, 1000 ; ecx = sleep time
sub rsp, 8 ; 8 bytes of shadow space
call Sleep ; call sleep
add rsp, 8 ; get rid …
Run Code Online (Sandbox Code Playgroud) c++ ×5
assembly ×4
opengl ×4
java ×3
lwjgl ×2
x86 ×2
.net ×1
2d ×1
c# ×1
c++11 ×1
comparison ×1
culling ×1
graphics ×1
lag ×1
layout ×1
machine-code ×1
masm ×1
oop ×1
performance ×1
qt ×1
qt-creator ×1
qt-designer ×1
rasterizing ×1
sdl ×1
static ×1
templates ×1
textures ×1
visual-c++ ×1
winapi ×1