小编Nat*_*.M.的帖子

减少opengl绘制调用与绑定较小纹理

我正在使用SFML制作等距(2D)游戏.我通过按Y位置对所有drawable进行排序来处理绘图顺序(深度),它的效果非常好.

游戏使用了大量的艺术资产,只有npcs,怪物和玩家图形都包含在他们自己的4k纹理图集中.从逻辑上讲,我不可能将所有内容放入一个地图集中.目标设备将无法处理该大小的纹理.请不要关注为什么它是不可能的,并且理解我在这种情况下必须为我的纹理使用单独的文件.

这会导致问题.假设我有2个npcs和2个支柱的等级.npcs位于NPCs.png中,支柱位于CastleLevel.png中.根据npcs移动的位置,绘制顺序(因此opengly纹理绑定顺序)可以不同.假设Y位置的排序方式如下:

npc1,pillar1,npc2,支柱2

这意味着opengl必须在2个纹理之间切换两次.我的问题是,我应该:

a)保持纹理atlasses OR

b)将它们全部分成较小的png文件(每个npc 1 png,每个柱子1 png等).由于纹理必须多次更改,如果opengl必须绑定较小的纹理,它会提高性能吗?

是否值得保留纹理atlasses因为它有时会减少绘制调用的数量?

opengl drawing textures

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

如何通过传递“ this”关键字来分配weak_ptr?

在我的程序中,组将共享指向主题的指针;主题对他们的组的指示力很弱。我希望该组具有一个join()函数,该函数将Subject的弱指针分配给它自己。以下是我尝试过的最小代码。如何修复join()函数?

#include <iostream>
#include <string>
#include <memory>

class Party;

class Subject
{
public:
    std::weak_ptr<Party> MyParty;
};

class Party
{
public:
    std::string Name;

    void join(std::shared_ptr<Subject> subject)
    {
        subject->MyParty = std::make_shared<Party>(*this); // <---- PROBLEM
    }
};

int main()
{
    auto& BlueParty = std::make_shared<Party>();
    BlueParty->Name = "Blue Party";

    auto& Jane = std::make_shared<Subject>();

    BlueParty->join(Jane);

    if (auto ptr = Jane->MyParty.lock())
    { 
        std::cout << "I am in " << ptr->Name << std::endl; 
    }

    else { std::cout << "I have no party." << std::endl; }

    return 0; …
Run Code Online (Sandbox Code Playgroud)

c++ this weak-ptr

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

如何将现有对象push_back到共享指针向量?

使用原始指针,我可以创建一个指针和push_back地址的向量,如下所示:

Entity objEntity;
std::vector<Entity*> Entities;
Entities.push_back(&objEntity);
Run Code Online (Sandbox Code Playgroud)

如果我改为使用共享指针向量:

std::vector<std::shared_ptr<Entity>> Entities;
Run Code Online (Sandbox Code Playgroud)

...如何推送地址?

据我所知,std :: shared_ptr :: reset用于将现有对象的地址分配给智能指针.我是否需要先创建一个临时指针,调用reset,然后再调用push_back?

std::shared_ptr<Entity> temp;
temp.reset(&objEntity);
Entities.push_back(temp);
Run Code Online (Sandbox Code Playgroud)

c++ smart-pointers stdvector

0
推荐指数
2
解决办法
1930
查看次数

标签 统计

c++ ×2

drawing ×1

opengl ×1

smart-pointers ×1

stdvector ×1

textures ×1

this ×1

weak-ptr ×1