HDMI is just "DVI with knobs on" on the video side.
As to "can it be done"... my first question is "what FPGA"? Some of them can create HDMI/DVI signals with the IO blocks, others just fundamentally can't.
DVI uses TMDS signalling, which is an encoding on top of a Current Mode Logic (CML) differential pair. CML is actively pulled down by a current source for a '0' and floats high with a termination resistor at the far end for a '1'. It might be emulatable for a hobby project by using a bidirectional LVDS pair driven low and using the tristate line to drive and release (a bit like doing an open-drain drive).
Then you have to encode and serialise the data. TMDS describes how to encode the data bits, and then you you "just" have to serialise the data bits across the data pairs. The specification can be found here - see section 3:
Digital Visual Interface Spec
The TFP410 chip data sheet also has a reasonable description of what goes on:
TFP410 - TI PanelBus™ DIGITAL TRANSMITTER
Is this a good method? - well it's not production worthy, but if you learn something from it then it's probably good.
You don't give enough information so we all have to make assumptions, but you claim to have something almost working and you indicate you have your suspicions as to what is wrong so I'll use this as a learning opportunity.
Just don't try to put this into production ...
You suspect that the VGA input is loading the resistor network. You're right, The standard procedure then would be to put a voltage buffer between the R-2R network and the VGA input. Choose a nice R-R (rail to rail) amplifier that is fast enough and put it on a clean supply. Make sure it's input impedance is high so this it doesn't load the R-2R network also.
The other issue you will have is the noise from the Logic levels in particular the power supply noise on the MSB will drive straight into the VGA inputs, you'll see ripples going through your screen. i.e. your PSRR will be 0 dB )or close enough) Simply put a digital buffer on the input that has a separate clean power supply, (shared with the O/P amplifier). Slow down the edges on the input and output just to keep things well behaved.
This should work fairly well. All the hand wringing about resistor accuracy is for the most part only important if you are looking for reproducibility from unit to unit. The INL will be dominated by the resistor accuracy, and the reproducibility of the DNL will be dominated by the resistor mismatch. But it is guaranteed to be Monotonic and given the human eye insensitivity to display gamma this should be mostly passible. And yes, you may have posterization in your colour tones (i.e. the shading transitions will noticeably weird).
I've dropped a number of terms in here to help guide your research, INL, DNL, Monotonic and Gamma, look them up, understand them.
Exploring techniques and topologies, and learning the limits and why things are done the way they are and how they fail is an important way to learn.
Best Answer
This is quite difficult to do well but there are a couple of examples. The main difficulty is in the speed of the CPU.
Here's one doing direct VGA output: Make: Arduino VGA Demo
If you Google "Arduino VGA" there are a few demo projects.
A couple options are the "TellyMate" shield that lets you output Composite rather than VGA (the single yellow connector you find on your TV.
Another is the "PICASO Universal Base Board" and "PICASO VGA/SVGA Graphics Controller" - this is not a direct shield but probably the best option I have seen.
Both the above items are available from Sparkfun and Little Bird Electronics among other places.